https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88853
--- Comment #6 from David Binderman <dcb314 at hotmail dot com> --- For this C++ code: cvise $ more bug1108.cc template <typename _Tp> constexpr bool is_trivially_destructible_v = __is_trivially_destructible(_Tp); template <typename... _Types> struct _Traits { static constexpr bool _S_trivial_dtor = (is_trivially_destructible_v<_Types> && ...); static constexpr bool _S_trivial_move_assign = _S_trivial_dtor; }; template <int> struct _Move_assign_base {}; template <typename... _Types> using _Move_assign_alias = _Move_assign_base<_Traits<_Types...>::_S_trivial_move_assign>; template <typename... _Types> struct _Variant_base : _Move_assign_alias<_Types...> {}; template <typename _Tp> struct vector { const _Tp data(); }; template <typename T> using _variant = _Variant_base<vector<T>>; template <template <typename> typename K> struct y_comb : K<y_comb<K>> {}; void get(const y_comb<_variant>) {} cvise $ Recent g++ does this: cvise $ ~/gcc/results/bin/g++ -g -fpack-struct bug1108.cc 2>&1 | grep error: bug1108.cc:14:32: error: type variant differs by TYPE_PACKED bug1108.cc:14:32: internal compiler error: ‘verify_type’ failed cvise $