https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79702
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- typedef __SIZE_TYPE__ size_t; template<typename...> using __void_t = void; template<typename _Tp, _Tp __v> struct integral_constant { static constexpr _Tp value = __v; typedef _Tp value_type; typedef integral_constant<_Tp, __v> type; constexpr operator value_type() const { return value; } constexpr value_type operator()() const { return value; } }; template<typename _Tp> struct tuple_size; template<typename _Tp, typename = void> struct __tuple_size_cv_impl { }; template<typename _Tp> struct __tuple_size_cv_impl<_Tp, __void_t<decltype(tuple_size<_Tp>::value)>> : integral_constant<size_t, tuple_size<_Tp>::value> { }; template<typename _Tp> struct tuple_size<const _Tp> : __tuple_size_cv_impl<_Tp> { }; struct S { int x1 : 2; volatile double y1; }; S f3() { return {}; } const auto [ x3, y3 ] = f3();