diff --git a/src/include/units/physical/dimensions.h b/src/include/units/physical/dimensions.h index f23859f5..2b3b1ffa 100644 --- a/src/include/units/physical/dimensions.h +++ b/src/include/units/physical/dimensions.h @@ -24,16 +24,25 @@ #include #include +#include #include #include namespace units::physical { +namespace detail { + +template typename DimTemplate, typename Child, Unit U, Exponent... Es> + requires requires { typename DimTemplate; } +void to_base_derived_dimension_of(const volatile derived_dimension*); + +} // namespace detail + template typename DimTemplate> -concept DimensionOf = Dimension && is_derived_from_specialization_of; +concept DimensionOf = Dimension && (is_derived_from_specialization_of || requires(const volatile Dim* x) { detail::to_base_derived_dimension_of(x); }); template typename DimTemplate> -concept QuantityOf = Quantity && is_derived_from_specialization_of; +concept QuantityOf = Quantity && DimensionOf; // ------------------------ base dimensions -----------------------------