https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109754

--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
cvise reduced it to

void declval();
template <typename, typename>
concept __same_as = requires { declval; };
template <class _Tp> _Tp __declval;
template <class> int __v;
using __msuccess = int;
template <int> struct __i;
template <class _Arg>
concept __ok = __same_as<_Arg, __msuccess>;
template <class... _Args>
concept _Ok = (__ok<_Args> && ...);
template <template <class> class> using __meval = __i<_Ok<>>;
template <class _Fn> using __minvoke = __meval<_Fn::template __f>;
template <class> struct __mexpand;
template <class, class _List> using __mapply = __minvoke<__mexpand<_List>>;
struct __msize;
template <class...> using __call_result_t = decltype(0);
template <class _Fun, class>
using __tuple_types_fn = decltype(__declval<_Fun>, [] {});
template <class _Fun> struct __mexpand {
  template <class _MetaFn> using __f = __tuple_types_fn<_Fun, _MetaFn>;
};
template <class _Tuple> long tuple_size_v = __v<__mapply<__msize, _Tuple>>;
template <class...> using tuple = __call_result_t<>;
using T = tuple<>;
                 static_assert(tuple_size_v< T >, "");


but that is probably invalid.

Reply via email to