fix: operators to behave like the underlying type's

This commit is contained in:
Johel Ernesto Guerrero Peña
2021-02-16 19:25:13 +01:00
committed by Mateusz Pusz
parent 58903e46e6
commit 00d182e133
5 changed files with 111 additions and 47 deletions
+16 -9
View File
@@ -43,15 +43,22 @@ using namespace units::physical::si::unit_constants;
static_assert(2 * m == 2_q_m);
static_assert(2 * s == 2_q_s);
#if !defined(COMP_MSVC) || defined(NDEBUG)
static_assert([]<auto& s = ::s>() {
assert(!requires { s / 2; });
assert(!requires { s * 2; });
assert(!requires { s + 2; });
assert(!requires { s + s; });
return 1_q_s + s == 2_q_s;
}());
#endif
template<auto& s>
concept invalid_operations = requires {
requires !requires { s / 2; };
requires !requires { s * 2; };
requires !requires { s + 2; };
requires !requires { 2 + s; };
requires !requires { s + s; };
requires !requires { s - 2; };
requires !requires { 2 - s; };
requires !requires { s - s; };
requires !requires { s + 1_q_s; };
requires !requires { s - 1_q_s; };
requires !requires { 1_q_s + s; };
requires !requires { 1_q_s - s; };
};
static_assert(invalid_operations<s>);
constexpr auto m_per_s = m / s;