| // 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 |
| } |