// PR c++/97388 // { dg-do compile { target c++20 } } struct S { int *s; constexpr S () : s(new int ()) {} constexpr S (S &&x) noexcept : s(x.s) { x.s = nullptr; } constexpr ~S () noexcept { delete s; } }; constexpr bool foo (S v) { auto x = static_cast (v); return true; } constexpr bool bar () { return foo (S ()); } constexpr bool baz () { foo (S ()); return foo (S ()); } static_assert (foo (S ())); static_assert (bar ()); static_assert (baz ()); constexpr bool x = foo (S ()); constexpr bool y = bar (); constexpr bool z = baz ();