@@ -1254,17 +1254,24 @@ auto test_nan()
12541254 const std::array<sig_type, 5 > sigs {1U , 2U , 3U , 0U , 0U };
12551255 constexpr std::array<const char *, 5 > payloads {" 1" , " 2" , " 3" , " Junk" , " 999999999999999999999999999999999999999999999999999999999999" };
12561256
1257+ const T quiet_nan {std::numeric_limits<T>::quiet_NaN ()};
1258+ sig_type quiet_nan_bits;
1259+ std::memcpy (&quiet_nan_bits, &quiet_nan, sizeof (sig_type));
1260+
1261+ const T signaling_nan {std::numeric_limits<T>::signaling_NaN ()};
1262+ sig_type signaling_nan_bits;
1263+ std::memcpy (&signaling_nan_bits, &signaling_nan, sizeof (sig_type));
1264+
12571265 for (std::size_t i {}; i < sigs.size (); ++i)
12581266 {
12591267 const auto payload {nan<T>(payloads[i])};
12601268 BOOST_TEST (isnan (payload));
12611269 BOOST_TEST (!issignaling (payload));
1262- const auto removed_nan {payload ^ std::numeric_limits<T>::quiet_NaN ()};
1263- BOOST_TEST (!isnan (removed_nan));
12641270
12651271 // Check the payload
12661272 sig_type bits {};
1267- std::memcpy (&bits, &removed_nan, sizeof (sig_type));
1273+ std::memcpy (&bits, &payload, sizeof (sig_type));
1274+ bits ^= quiet_nan_bits;
12681275 BOOST_TEST_EQ (bits, sigs[i]);
12691276
12701277 const auto payload_func_bits {read_payload (payload)};
@@ -1276,12 +1283,11 @@ auto test_nan()
12761283 const auto payload {snan<T>(payloads[i])};
12771284 BOOST_TEST (isnan (payload));
12781285 BOOST_TEST (issignaling (payload));
1279- const auto removed_nan {payload ^ std::numeric_limits<T>::signaling_NaN ()};
1280- BOOST_TEST (!isnan (removed_nan));
12811286
12821287 // Check the payload
12831288 sig_type bits {};
1284- std::memcpy (&bits, &removed_nan, sizeof (sig_type));
1289+ std::memcpy (&bits, &payload, sizeof (sig_type));
1290+ bits ^= signaling_nan_bits;
12851291 BOOST_TEST_EQ (bits, sigs[i]);
12861292
12871293 const auto payload_func_bits {read_payload (payload)};
0 commit comments