2#ifndef INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_UNITS_EXPLICIT_BASE_SET_HPP_
3#define INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_UNITS_EXPLICIT_BASE_SET_HPP_
5#include "arene/base/constraints/constraints.hpp"
6#include "arene/base/stdlib_choice/cstddef.hpp"
7#include "arene/base/stdlib_choice/enable_if.hpp"
8#include "arene/base/stdlib_choice/remove_const.hpp"
9#include "arene/base/stdlib_choice/remove_cv.hpp"
10#include "arene/base/type_traits/always_false.hpp"
11#include "arene/base/units/base_kind_set.hpp"
12#include "arene/base/units/is_explicit.hpp"
13#include "arene/base/units/is_quantity_kind.hpp"
14#include "arene/base/units/kind_with_exponent_fwd.hpp"
15#include "arene/base/units/quantity_kind.hpp"
16#include "arene/base/units/scaled_unit.hpp"
25namespace combine_kinds_detail {
28template <
typename... BaseKinds>
29class combined_quantity_kind;
32namespace units_detail {
39template <
typename Kind>
40class explicit_base_barrier :
public quantity_kind<explicit_base_barrier<Kind>> {};
42namespace explicit_base_set_detail {
49template <
typename Kind>
50constexpr auto explicit_base_set_error() -> std::nullptr_t {
52 is_quantity_kind_v<Kind>,
53 "explicit base set cannot be determined for invalid quantity kind"
57 "internal error: a valid quantity kind was sorted to the explicit_base_set_error function by mistake"
66template <
typename Kind,
typename = constraints<>>
67extern constexpr auto explicit_base_set = explicit_base_set_error<Kind>();
73template <
typename Kind>
74extern constexpr auto explicit_base_set<Kind, constraints<std::enable_if_t<is_explicit_v<Kind>>>> =
75 base_kind_set<Kind>{base_kind_exponents{1U, 0U}};
83template <
typename Kind, exponent_t PositiveExponent, exponent_t NegativeExponent>
85 explicit_base_set<quantity_kind_with_exponent<Kind, PositiveExponent, NegativeExponent, constraints<>>> =
87 PositiveExponent * explicit_base_set<
typename Kind::quantity_kind_type>,
88 -NegativeExponent* explicit_base_set<
typename Kind::quantity_kind_type>
95template <
typename... BaseKinds>
96extern constexpr auto explicit_base_set<combine_kinds_detail::combined_quantity_kind<BaseKinds...>> =
97 set_union(explicit_base_set<BaseKinds>...);
104template <
typename BaseUnit,
typename Scale>
105extern constexpr auto explicit_base_set<scaled_unit_detail::scaled_unit_impl<BaseUnit, Scale>> =
106 explicit_base_set<BaseUnit>;
131template <
typename Kind>
132extern constexpr auto explicit_base_set = explicit_base_set_detail::explicit_base_set<std::remove_cv_t<Kind>>;
136template <
typename Kind>
137using explicit_base_set_t = std::remove_const_t<
decltype(explicit_base_set<Kind>)>;
Definition array_exceptions_disabled.cpp:11
Copyright 2026, Toyota Motor Corporation.
Definition array_exceptions_disabled.cpp:10