On Fri, 26 Nov 2021 at 12:43, Jonathan Wakely wrote: > > On Fri, 26 Nov 2021 at 12:39, Jakub Jelinek wrote: > > > > On Fri, Nov 26, 2021 at 12:29:25PM +0000, Jonathan Wakely via Gcc-patches wrote: > > > + // Internal version of std::is_constant_evaluated() for C++11. > > > + // This can be used without checking if the compiler supports the built-in. > > > + constexpr inline bool > > > + __is_constant_evaluated() noexcept > > > + { > > > > When you have such a nice one spot, shouldn't it: > > #if __cpp_if_consteval >= 202106L > > if consteval > > { > > return true; > > } > > else > > { > > return false; > > } > > #elif __has_builtin(__builtin_is_constant_evaluated) > > ... > > > > Theoretically not all compilers need to support the builtin and in C++23 > > mode if consteval should be slightly more efficient. > > Yes, good idea. We actually still have two spots, because we still > have std::is_constant_evaluated as well, which is only defined if it > actually works. But we can use the same implementation in there (or > make it call std::__is_constant_evaluated()). I'll prepare a new patch > soon. > > > One disadvantage of std::__is_constant_evaluated() is that Marek's > > warning for if constexpr (std::is_constant_evaluated()) will not trigger > > if __is_constant_evaluated() is used instead. But I'd hope testsuite > > coverage would discover it quickly if such bug would appear... > > Yes, and I hope I won't make that mistake anyway, or miss it in reviews. > > It's a good warning for users, but I like to think I don't need it > (and now we start the sweepstake on how many days until I push a patch > making exactly that mistake ;-) Who had -15 days in the sweepstake? r12-5187 did it. Fixed in r12-5552. Here's a new WIP patch for __is_constant_evaluated.