diff --git a/src/include/units/bits/stdconcepts.h b/src/include/units/bits/stdconcepts.h index 7a60a0e5..88596fe9 100644 --- a/src/include/units/bits/stdconcepts.h +++ b/src/include/units/bits/stdconcepts.h @@ -39,5 +39,10 @@ namespace mp { static_cast(f()); }; + template + concept bool DerivedFrom = + std::is_base_of_v && + std::is_convertible_v; + } // namespace std_concepts } // namespace mp diff --git a/src/include/units/dimension.h b/src/include/units/dimension.h index e9b4f4b4..bcee7d02 100644 --- a/src/include/units/dimension.h +++ b/src/include/units/dimension.h @@ -101,7 +101,10 @@ namespace units { } // namespace detail template - concept bool Dimension = detail::is_dimension; + concept bool Dimension = + std::is_empty_v && + detail::is_dimension && + DerivedFrom; // dim_invert diff --git a/src/include/units/unit.h b/src/include/units/unit.h index b4eddba2..9b31d2e6 100644 --- a/src/include/units/unit.h +++ b/src/include/units/unit.h @@ -47,7 +47,10 @@ namespace units { } template - concept bool Unit = detail::is_unit; + concept bool Unit = + std::is_empty_v && + detail::is_unit && + DerivedFrom; // dimension_traits