| // { dg-do compile } |
| // Origin: C++ standard, [temp.arg.nontype]/3 |
| |
| template<int* p> class X { }; |
| |
| int a[10]; |
| struct S { int m; static int s; } s; |
| |
| X<&a[2]> x3; // { dg-error "3:.& a\\\[2\\\]. is not a valid template argument" "" { target c++17_only } } |
| // { dg-error "" "" { target c++14_down } .-1 } |
| X<&s.m> x4; // { dg-error "3:.& s.S::m. is not a valid template argument" "" { target c++17_only } } |
| // { dg-error "" "" { target c++14_down } .-1 } |
| X<&s.s> x5; // { dg-error "" "" { target { ! c++17 } } } &S::s must be used |
| X<&S::s> x6; // OK: address of static member |
| |