added inheritance unit-test and made is_quantity<T> more specific

This commit is contained in:
Ralph J. Steinhagen
2021-06-27 13:42:55 +02:00
committed by Mateusz Pusz
parent 95ac869522
commit 8e1539bf22
3 changed files with 24 additions and 1 deletions

View File

@ -269,7 +269,7 @@ concept Reference = detail::is_reference<T>;
namespace detail {
template<typename T>
inline constexpr bool is_quantity = requires { typename T::dimension; typename T::unit; typename T::rep;};
inline constexpr bool is_quantity = false;
template<typename T>
inline constexpr bool is_quantity_point = false;

View File

@ -460,6 +460,17 @@ namespace detail {
template<typename D, typename U, typename Rep>
inline constexpr bool is_quantity<quantity<D, U, Rep>> = true;
template<typename T>
requires units::is_derived_from_specialization_of<T, units::quantity> &&
requires {
typename T::dimension;
typename T::unit;
typename T::rep;
requires Dimension<typename T::dimension>;
requires Unit<typename T::unit>;
requires Representation<typename T::rep>; }
inline constexpr bool is_quantity<T> = true;
} // namespace detail
} // namespace units

View File

@ -234,6 +234,18 @@ static_assert(length<kilometre, int>(2_q_km).number() == 2);
static_assert(length<metre, int>(2_q_km).number() == 2000);
static_assert(length<kilometre>(1500_q_m).number() == 1.5);
///////////////////////////////////////
// derived quantities
///////////////////////////////////////
template<Representation Rep, units::Quantity Q, const units::basic_fixed_string additional_nttp_argument>
struct derived_quantity : quantity<typename Q::dimension, typename Q::unit, Rep> {
using dimension = typename Q::dimension;
using unit = typename Q::unit;
using rep = Rep;
};
static_assert(units::detail::is_quantity<derived_quantity<double, si::length<metre>, "NTTP type description">>);
/////////
// CTAD