https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102780
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Patrick suggested defining the destructor constraint like this instead: // Conditionally non-trivial dtor, if required. constexpr ~variadic_union() requires (!trivially_destructible<T>) || (!trivially_destructible<variadic_union<U...>>) { } This makes a huge difference in the examples above, making them compile much faster.