|
@@ -41,3 +41,18 @@ TEST(OpaqueTypedefTest, Conversion) {
|
|
|
EXPECT_THAT(radian(double(deg)), ::testing::Not(rad));
|
|
EXPECT_THAT(radian(double(deg)), ::testing::Not(rad));
|
|
|
EXPECT_THAT(degree(double(rad)), ::testing::Not(deg));
|
|
EXPECT_THAT(degree(double(rad)), ::testing::Not(deg));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+struct meters;
|
|
|
|
|
+struct seconds;
|
|
|
|
|
+struct meter_per_second;
|
|
|
|
|
+CREATE_OPAQUE_TYPEDEF(seconds, double, orderable);
|
|
|
|
|
+CREATE_OPAQUE_TYPEDEF(meter_per_second, double, orderable);
|
|
|
|
|
+template <typename T> using mix_multiplication = mixed_multiplication<meters, seconds, meter_per_second>;
|
|
|
|
|
+CREATE_OPAQUE_TYPEDEF(meters, double, orderable, mix_multiplication);
|
|
|
|
|
+
|
|
|
|
|
+TEST(OpaqueTypedefTest, MixedFunctions) {
|
|
|
|
|
+ meters m{10.0};
|
|
|
|
|
+ seconds s{0.5};
|
|
|
|
|
+
|
|
|
|
|
+ EXPECT_THAT(m*s, meter_per_second{5.0});
|
|
|
|
|
+}
|