https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78939
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think this boils down if #include <tuple> struct S { int s; }; std::tuple_size<const S> t; is valid or not (with <S> instead of <const S> it is invalid). // _GLIBCXX_RESOLVE_LIB_DEFECTS // 2770. tuple_size<const T> specialization is not SFINAE compatible template<typename _Tp, typename = void> - struct __tuple_size_cv_impl { }; + struct __tuple_size_cv_impl /*{ }*/; in utility makes it invalid and the decomposition then works fine.