// RUN: %clang_cc1 -std=c++20 -verify %s // expected-no-diagnostics template struct S { template struct N { N(T) {} N(T, U) {} template N(V, U) {} }; }; S::N x{"a", 1}; using T = decltype(x); using T = S::N; template struct default_ftd_argument { template struct B { template B(Y); }; }; default_ftd_argument::B default_arg("a"); using DefaultArg = decltype(default_arg); using DefaultArg = default_ftd_argument::B; template struct test; template struct non_type_param { template struct B { B(Y); template = 0> B(Z); }; }; non_type_param::B ntp = 5; using NonTypeParam = decltype(ntp); using NonTypeParam = non_type_param::B; template concept C = (sizeof(T) == sizeof(A)); template struct concepts { template struct B { template Z> B(Y, Z); }; }; concepts::B cc(1, 3); using Concepts = decltype(cc); using Concepts = concepts::B; template struct requires_clause { template struct B { template requires (sizeof(Z) == sizeof(X)) B(Y, Z); }; }; requires_clause::B req(1, 2); using RC = decltype(req); using RC = requires_clause::B;