// CWG 1001/1322 // PR c++/101402 // PR c++/102033 // PR c++/102034 // PR c++/102039 // PR c++/102044 namespace test2{ template void f(const T); template<> void f(const int*){} } namespace test3{ template struct A{ void f(T); }; template void A::f(const T){} template<> void A::f(const int*){} } namespace test4 { template struct A{ template struct B{ typedef TB Arr3[3]; }; }; template void f(const typename A::template B::Arr3){} template <> void f(const typename A::B::Arr3){} } namespace test5 { struct A{ typedef int Arr3[3]; }; template void f(const typename T::Arr3){} template<> void f(const int[3]){} } namespace test6 { struct A{ typedef int Arr3[3]; }; template void f(const typename T::Arr3){} template<> void f(const int*){} } #if __cpp_alias_templates namespace test7 { template struct A{ template using Type=TB[3]; }; template void f(const typename A::template Type){} template <> void f(const typename A::template Type){} } namespace test8 { template struct A{ template struct B{ using TB_Alias=TB; template struct C{ typedef TC Arr3[3]; }; }; }; template void f(const typename A::template B::template C<>::Arr3){} template <> void f(const typename A::template B::template C<>::Arr3){} } #endif #if __cpp_decltype namespace test0 { template struct A{ T arr3[3]; }; template void f(const decltype(A::arr3)){} template <> void f(const int[3]){} } #if __cpp_variable_templates namespace test9 { template void f(const T[N]){} template using fPtr=decltype(f)*; template fPtr af[N]={&f}; template void g(const decltype(af)){} template<> void g<1,int>(const fPtr<1,int>[1]){} } #endif #endif #if __cpp_concepts template concept IsLambdaAry3=__is_same(T, decltype(+[]{})[3]); template void bar(const T){} template<> void bar(const decltype(+[]{})[3]){} #endif