https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103891
Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ppalka at gcc dot gnu.org --- Comment #2 from Patrick Palka <ppalka at gcc dot gnu.org> --- Further reduction: template<typename _First> union _Variadic_union { ~_Variadic_union() = default; ~_Variadic_union() requires true { } _First _M_first; }; struct vector { ~vector(); }; _Variadic_union<vector> v; Which Clang rejects with: 103891.ii:10:25: error: attempt to use a deleted function _Variadic_union<vector> v; ^ 103891.ii:3:3: note: explicitly defaulted function was implicitly deleted here ~_Variadic_union() = default; ^ 103891.ii:5:10: note: destructor of '_Variadic_union<vector>' is implicitly deleted because variant field '_M_first' has a non-trivial destructor _First _M_first; ^ So it looks like Clang is selecting the less specialized defaulted destructor, which doesn't seem correct.