diff --git a/au/code/au/unit_of_measure.hh b/au/code/au/unit_of_measure.hh index 74d8a451..93008e6d 100644 --- a/au/code/au/unit_of_measure.hh +++ b/au/code/au/unit_of_measure.hh @@ -430,6 +430,10 @@ struct SingularNameFor { } }; +// Support `SingularNameFor` in (quantity) unit slots. +template +struct AssociatedUnit> : stdx::type_identity {}; + template constexpr auto pow(SingularNameFor) { return SingularNameFor>{}; diff --git a/au/code/au/unit_of_measure_test.cc b/au/code/au/unit_of_measure_test.cc index f45c9f2c..3460e32f 100644 --- a/au/code/au/unit_of_measure_test.cc +++ b/au/code/au/unit_of_measure_test.cc @@ -142,8 +142,9 @@ TEST(IsUnit, FalseIfDimOrMagHasWrongType) { TEST(IsUnit, FunctionalFormFalseForQuantityMaker) { EXPECT_FALSE(is_unit(meters)); } -TEST(FitsInUnitSlot, TrueForUnitAndQuantityMaker) { +TEST(FitsInUnitSlot, TrueForUnitAndQuantityMakerAndSingularNameFor) { EXPECT_TRUE(fits_in_unit_slot(meters)); + EXPECT_TRUE(fits_in_unit_slot(meter)); EXPECT_TRUE(fits_in_unit_slot(Meters{})); EXPECT_FALSE(fits_in_unit_slot(1.2)); @@ -242,6 +243,10 @@ TEST(AssociatedUnitT, HandlesWrappersWhichHaveSpecializedAssociatedUnit) { StaticAssertTypeEq>, Feet>(); } +TEST(AssociatedUnitT, SupportsSingularNameFor) { + StaticAssertTypeEq>, Feet>(); +} + TEST(UnitInverseT, CommutesWithProduct) { StaticAssertTypeEq>, UnitProductT, UnitInverseT>>();