diff --git a/au/code/au/quantity.hh b/au/code/au/quantity.hh index 210bc0a3..a5723550 100644 --- a/au/code/au/quantity.hh +++ b/au/code/au/quantity.hh @@ -340,7 +340,7 @@ class Quantity { } template - void perform_shorthand_checks() { + constexpr void perform_shorthand_checks() { static_assert( IsValidRep::value, "This overload is only for scalar mult/div-assignment with raw numeric types"); diff --git a/au/code/au/quantity_test.cc b/au/code/au/quantity_test.cc index 75cbae98..e5f1d4e0 100644 --- a/au/code/au/quantity_test.cc +++ b/au/code/au/quantity_test.cc @@ -481,6 +481,16 @@ TEST(Quantity, ShorthandMultiplicationAssignmentWorksForComplexRepAndScalar) { EXPECT_THAT(test, SameTypeAndValue(meters(std::complex{2.5f, 2.5f}))); } +template +constexpr T double_by_shorthand(T x) { + return x *= 2.0; +} + +TEST(Quantity, ShorthandMultiplicationSupportsConstexpr) { + constexpr auto x = double_by_shorthand(feet(3.0)); + EXPECT_THAT(x, SameTypeAndValue(feet(6.0))); +} + TEST(Quantity, ShorthandDivisionAssignmentWorksForComplexRepAndScalar) { auto test = meters(std::complex{25.0f, 12.5f}); test /= std::complex{3.0f, 4.0f};