diff --git a/src/core/include/units/bits/expression_template.h b/src/core/include/units/bits/expression_template.h index f7ee9ff0..ed3bcb70 100644 --- a/src/core/include/units/bits/expression_template.h +++ b/src/core/include/units/bits/expression_template.h @@ -66,7 +66,7 @@ struct power { namespace detail { template -constexpr auto power_or_T_impl() +consteval auto power_or_T_impl() { constexpr ratio r{Num, Den}; if constexpr (r.den == 1) { @@ -287,7 +287,7 @@ public: }; template typename To> -[[nodiscard]] constexpr auto expr_expression_impl() +[[nodiscard]] consteval auto expr_expression_impl() { constexpr std::size_t num = type_list_size; constexpr std::size_t den = type_list_size; @@ -312,7 +312,7 @@ using expr_expression = decltype(expr_expression_impl typename Pred, template typename To> -[[nodiscard]] constexpr auto get_optimized_expression() +[[nodiscard]] consteval auto get_optimized_expression() { using num_list = expr_consolidate; using den_list = expr_consolidate; @@ -332,7 +332,7 @@ template typename Pred, template typename To> -[[nodiscard]] constexpr auto expr_multiply() +[[nodiscard]] consteval auto expr_multiply() { if constexpr (is_same_v) { return T2{}; @@ -356,7 +356,7 @@ template typename Pred, template typename To> -[[nodiscard]] constexpr auto expr_divide() +[[nodiscard]] consteval auto expr_divide() { if constexpr (is_same_v) { return OneType{}; @@ -378,7 +378,7 @@ template typename To> -[[nodiscard]] constexpr auto expr_invert() +[[nodiscard]] consteval auto expr_invert() { if constexpr (is_specialization_of) return expr_expression{}; diff --git a/src/core/include/units/bits/external/type_list.h b/src/core/include/units/bits/external/type_list.h index 28007478..3eddfcfe 100644 --- a/src/core/include/units/bits/external/type_list.h +++ b/src/core/include/units/bits/external/type_list.h @@ -48,7 +48,7 @@ concept TypeList = detail::is_type_list; namespace detail { template typename List, typename... Ts> -constexpr std::size_t type_list_size_impl(List) +consteval std::size_t type_list_size_impl(List) { return sizeof...(Ts); } diff --git a/src/core/include/units/dimension.h b/src/core/include/units/dimension.h index b07a0076..407088f1 100644 --- a/src/core/include/units/dimension.h +++ b/src/core/include/units/dimension.h @@ -140,28 +140,28 @@ using dim_type = dim_type_impl::type; } // namespace detail template -[[nodiscard]] constexpr Dimension auto operator*(D1, D2) +[[nodiscard]] consteval Dimension auto operator*(D1, D2) { return detail::expr_multiply, detail::dim_type, struct one_dim, detail::type_list_of_base_dimension_less, derived_dimension>(); } template -[[nodiscard]] constexpr Dimension auto operator/(D1, D2) +[[nodiscard]] consteval Dimension auto operator/(D1, D2) { return detail::expr_divide, detail::dim_type, struct one_dim, detail::type_list_of_base_dimension_less, derived_dimension>(); } template -[[nodiscard]] constexpr Dimension auto operator/(int value, D) +[[nodiscard]] consteval Dimension auto operator/(int value, D) { gsl_Assert(value == 1); return detail::expr_invert, struct one_dim, derived_dimension>(); } template -[[nodiscard]] constexpr bool operator==(D1, D2) +[[nodiscard]] consteval bool operator==(D1, D2) { return is_same_v, detail::dim_type>; } diff --git a/src/core/include/units/reference.h b/src/core/include/units/reference.h index 6fa3c6cc..291a7fab 100644 --- a/src/core/include/units/reference.h +++ b/src/core/include/units/reference.h @@ -121,14 +121,14 @@ template concept Reference = is_specialization_of; template -[[nodiscard]] constexpr reference operator*(R1, +[[nodiscard]] consteval reference operator*(R1, R2) { return {}; } template -[[nodiscard]] constexpr reference operator/(R1, +[[nodiscard]] consteval reference operator/(R1, R2) { return {}; @@ -153,7 +153,7 @@ struct system_reference { template // requires same_unit_reference - [[nodiscard]] constexpr reference operator[](U) const + [[nodiscard]] consteval reference operator[](U) const { return {}; } diff --git a/src/core/include/units/unit.h b/src/core/include/units/unit.h index 697100f3..5081cb5b 100644 --- a/src/core/include/units/unit.h +++ b/src/core/include/units/unit.h @@ -221,26 +221,26 @@ using type_list_of_unit_less = expr_less; } // namespace detail template -[[nodiscard]] constexpr Unit auto operator*(U1, U2) +[[nodiscard]] consteval Unit auto operator*(U1, U2) { return detail::expr_multiply(); } template -[[nodiscard]] constexpr Unit auto operator/(U1, U2) +[[nodiscard]] consteval Unit auto operator/(U1, U2) { return detail::expr_divide(); } template -[[nodiscard]] constexpr Unit auto operator/(int value, U) +[[nodiscard]] consteval Unit auto operator/(int value, U) { gsl_Assert(value == 1); return detail::expr_invert(); } template -[[nodiscard]] constexpr bool operator==(U1, U2) +[[nodiscard]] consteval bool operator==(U1, U2) { return false; }