https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117727
Bug ID: 117727 Summary: __builtin_bit_cast with target type nullptr_t unimplemented Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: tbaeder at redhat dot com Target Milestone: --- See this example code: typedef __UINTPTR_TYPE__ uintptr_t; constexpr uintptr_t A = __builtin_bit_cast(uintptr_t, nullptr); static_assert(A == 0); typedef decltype(nullptr) nullptr_t; constexpr decltype(nullptr) N = __builtin_bit_cast(nullptr_t, (uintptr_t)12); static_assert(N == nullptr); The first bitcast works, but the second one doesn't: array.cpp:30:52: sorry, unimplemented: ‘__builtin_bit_cast’ cannot be constant evaluated because the argument cannot be interpreted 30 | constexpr decltype(nullptr) N = __builtin_bit_cast(nullptr_t, (uintptr_t)12); | ^~~~~~~~~ I think this should work similarly. I checked that using std::nullptr_t from <cstddef> has the same problem.