@@ -22,28 +22,33 @@ struct I8OverflowProbe {
2222 static consteval auto value () { return 128_i8; }
2323};
2424
25- struct F32PrecisionLossProbe {
26- static consteval auto value () { return 16777217_f32 ; }
25+ struct F32ExactPrecisionLossProbe {
26+ static consteval auto value () { return 16777217_f32e ; }
2727};
2828
29- struct F64PrecisionLossProbe {
30- static consteval auto value () { return 9007199254740993_f64 ; }
29+ struct F64ExactPrecisionLossProbe {
30+ static consteval auto value () { return 9007199254740993_f64e ; }
3131};
3232
3333struct F32OverflowProbe {
3434 static consteval auto value () { return 1 .0e39_f32; }
3535};
3636
37- struct F32UnderflowProbe {
38- static consteval auto value () { return 1 .0e-50_f32; }
37+ struct F32ExactOverflowProbe {
38+ static consteval auto value () { return 1 .0e39_f32e; }
39+ };
40+
41+ struct F32ExactUnderflowProbe {
42+ static consteval auto value () { return 1 .0e-50_f32e; }
3943};
4044
4145static_assert (!literal_available<U8OverflowProbe>);
4246static_assert (!literal_available<I8OverflowProbe>);
43- static_assert (!literal_available<F32PrecisionLossProbe >);
44- static_assert (!literal_available<F64PrecisionLossProbe >);
47+ static_assert (!literal_available<F32ExactPrecisionLossProbe >);
48+ static_assert (!literal_available<F64ExactPrecisionLossProbe >);
4549static_assert (!literal_available<F32OverflowProbe>);
46- static_assert (!literal_available<F32UnderflowProbe>);
50+ static_assert (!literal_available<F32ExactOverflowProbe>);
51+ static_assert (!literal_available<F32ExactUnderflowProbe>);
4752
4853} // namespace
4954
@@ -73,19 +78,40 @@ TEST(UnderlyingLiteralsTest, IntegerLiteralsReturnExpectedUnderlyingTypes) {
7378
7479TEST (UnderlyingLiteralsTest, FloatingLiteralsReturnExpectedUnderlyingTypes) {
7580 static_assert (std::same_as<decltype (1 .25_f32), float >);
81+ static_assert (std::same_as<decltype (1 .25_f32e), float >);
7682 static_assert (std::same_as<decltype (1 .25_f64), double >);
83+ static_assert (std::same_as<decltype (1 .25_f64e), double >);
7784 static_assert (std::same_as<decltype (1 .25_f80), long double >);
85+ static_assert (std::same_as<decltype (1 .25_f80e), long double >);
7886 static_assert (std::same_as<decltype (16777216_f32), float >);
87+ static_assert (std::same_as<decltype (16777216_f32e), float >);
88+ static_assert (std::same_as<decltype (16777217_f32), float >);
7989 static_assert (std::same_as<decltype (9007199254740992_f64), double >);
90+ static_assert (std::same_as<decltype (9007199254740992_f64e), double >);
91+ static_assert (std::same_as<decltype (9007199254740993_f64), double >);
92+ static_assert (std::same_as<decltype (0 .1_f32), float >);
93+ static_assert (std::same_as<decltype (0 .1_f64), double >);
8094
8195 EXPECT_FLOAT_EQ (1 .25_f32, 1 .25f );
96+ EXPECT_FLOAT_EQ (1 .25_f32e, 1 .25f );
8297 EXPECT_DOUBLE_EQ (1 .25_f64, 1.25 );
98+ EXPECT_DOUBLE_EQ (1 .25_f64e, 1.25 );
8399 EXPECT_EQ (1 .25_f80, static_cast <long double >(1.25 ));
100+ EXPECT_EQ (1 .25_f80e, static_cast <long double >(1.25 ));
84101 EXPECT_FLOAT_EQ (16777216_f32, 16777216 .0f );
102+ EXPECT_FLOAT_EQ (16777216_f32e, 16777216 .0f );
103+ EXPECT_FLOAT_EQ (16777217_f32, static_cast <float >(16777217 .0L ));
85104 EXPECT_DOUBLE_EQ (9007199254740992_f64, 9007199254740992.0 );
105+ EXPECT_DOUBLE_EQ (9007199254740992_f64e, 9007199254740992.0 );
106+ EXPECT_DOUBLE_EQ (9007199254740993_f64, static_cast <double >(9007199254740993 .0L ));
107+ EXPECT_FLOAT_EQ (0 .1_f32, static_cast <float >(0 .1L ));
86108 EXPECT_FLOAT_EQ (2_f32, 2 .0f );
109+ EXPECT_FLOAT_EQ (2_f32e, 2 .0f );
110+ EXPECT_DOUBLE_EQ (0 .1_f64, static_cast <double >(0 .1L ));
87111 EXPECT_DOUBLE_EQ (2_f64, 2.0 );
112+ EXPECT_DOUBLE_EQ (2_f64e, 2.0 );
88113 EXPECT_EQ (2_f80, static_cast <long double >(2.0 ));
114+ EXPECT_EQ (2_f80e, static_cast <long double >(2.0 ));
89115}
90116
91117TEST (UnderlyingLiteralsTest, CharacterLiteralsReturnExpectedUnderlyingTypes) {
0 commit comments