8template <
typename BaseT>
26template <
typename ThingT>
27auto g(
const ThingT &t)
47inline auto f(
const int t)
65 EXPECT_TRUE(a ==
Thing1(~1));
77 EXPECT_TRUE(a ==
Thing1(3));
78 EXPECT_TRUE(b ==
Thing1(2));
90 EXPECT_TRUE((std::is_same_v<
decltype(a | b),
Thing1>));
92 EXPECT_TRUE((a | b) ==
Thing1(3));
93 EXPECT_TRUE((a | b | c) ==
Thing1(3));
94 EXPECT_TRUE((a | b | c | d) ==
Thing1(7));
104 EXPECT_FALSE(a == b);
108 EXPECT_TRUE(a ==
Thing1(0));
109 EXPECT_TRUE(b ==
Thing1(2));
118 EXPECT_FALSE(a == b);
120 EXPECT_TRUE((std::is_same_v<
decltype(a & b),
Thing1>));
122 EXPECT_TRUE((a & b) ==
Thing1(0));
123 EXPECT_TRUE((a & c) ==
Thing1(1));
124 EXPECT_TRUE((b & c) ==
Thing1(2));
126 EXPECT_EQ(
f(a & c),
Thing1(2));
134 EXPECT_FALSE(a == b);
138 EXPECT_TRUE(a ==
Thing1(3));
139 EXPECT_TRUE(b ==
Thing1(2));
149 EXPECT_FALSE(a == b);
151 EXPECT_TRUE((std::is_same_v<
decltype(a + b),
Thing1>));
153 EXPECT_EQ((a + b),
Thing1(3));
154 EXPECT_EQ((a + b + c),
Thing1(6));
155 EXPECT_EQ((a + b + c + d),
Thing1(10));
157 EXPECT_EQ(
f(a + c),
Thing1(8));
165 EXPECT_FALSE(a == b);
169 EXPECT_TRUE(a ==
Thing1(-1));
170 EXPECT_TRUE(b ==
Thing1(2));
180 EXPECT_FALSE(a == b);
182 EXPECT_TRUE((std::is_same_v<
decltype(a - b),
Thing1>));
185 EXPECT_TRUE((a - b - c) ==
Thing1(-4));
186 EXPECT_TRUE((a - b - c - d) ==
Thing1(-8));
188 EXPECT_EQ(
f(a - c),
Thing1(-4));
196 EXPECT_FALSE(a == b);
211 EXPECT_FALSE(a == b);
213 EXPECT_TRUE((std::is_same_v<
decltype(a * b),
Thing1>));
215 EXPECT_EQ((a * b),
Thing1(2));
216 EXPECT_EQ((a * b * c),
Thing1(6));
217 EXPECT_EQ((a * b * c * d),
Thing1(24));
219 EXPECT_EQ(
f(a * c),
Thing1(6));
227 EXPECT_FALSE(a == b);
242 EXPECT_FALSE(a == b);
244 EXPECT_TRUE((std::is_same_v<
decltype(a / b),
Thing1>));
246 EXPECT_EQ((a / b),
Thing1(60));
247 EXPECT_EQ((a / b / c),
Thing1(20));
248 EXPECT_EQ((a / b / c / d),
Thing1(5));
250 EXPECT_EQ(
f(a / c),
Thing1(80));
CRTP type designed to allow creation of strong types based on intrinsics.
constexpr value_type get() const noexcept
Getter for the underlying value.
TEST(IntrinsicType, overload1)
IntrinsicType< BaseT, int > IntrinsicInt