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.

Reply via email to