// PR c++/61355 // Verify we perform array-to-pointer and function-to-pointer conversion // on the substituted/deduced type of an NTTP. int f(); int p[5]; namespace cpp98 { template<class T, T> struct X; typedef X<int(), f> ty1; typedef X<int[5], p> ty2; } namespace cpp11 { #if __cpp_variadic_templates template<class T, T...> struct X; using ty1 = X<int(), f>; using ty2 = X<int[5], p>; #endif } namespace cpp17 { #if __cpp_nontype_template_parameter_auto template<decltype(auto)> struct X; using ty1 = X<f>; using ty2 = X<p>; template<decltype(auto)...> struct Y; using ty3 = Y<f>; using ty4 = Y<p>; #endif }