From 86b917781699f1538e08a45269b9bb1afc2bef7a Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Thu, 28 May 2020 20:19:05 +0200 Subject: [PATCH] Specialize common_type to satisfy comparison concepts (resolves #113) --- src/include/units/bits/common_quantity.h | 10 ++++++++++ test/unit_test/static/quantity_test.cpp | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/include/units/bits/common_quantity.h b/src/include/units/bits/common_quantity.h index 0a1b4da0..6e9c9640 100644 --- a/src/include/units/bits/common_quantity.h +++ b/src/include/units/bits/common_quantity.h @@ -64,3 +64,13 @@ template::type; } // namespace units + +namespace std { + +template + requires units::equivalent_dim +struct common_type { + using type = units::common_quantity; +}; + +} \ No newline at end of file diff --git a/test/unit_test/static/quantity_test.cpp b/test/unit_test/static/quantity_test.cpp index 9618b0f4..1c0e4cb4 100644 --- a/test/unit_test/static/quantity_test.cpp +++ b/test/unit_test/static/quantity_test.cpp @@ -25,6 +25,7 @@ #include "units/physical/si/frequency.h" #include "units/physical/si/speed.h" #include "units/physical/si/volume.h" +#include "units/physical/us/length.h" #include #include @@ -222,6 +223,15 @@ static_assert( static_assert(std::is_same_v, length>, length>); +// common_type + +using namespace units::physical::us::literals; + +static_assert(std::equality_comparable); +static_assert(std::equality_comparable_with); +static_assert(0q_m == 0q_ft_us); +static_assert(std::equality_comparable_with); + // quantity_cast static_assert(std::is_same_v, metre>>(2q_km))::unit, metre>);