| // { dg-do compile { target c++11 } } |
| |
| template <class T, class = typename T::I> void f(T) {} |
| template <class T, class = typename T::I> void g(T) {} |
| template <class T, class = typename T::I> void h(T) {} |
| template <class T, class = typename T::I> void i(T) {} |
| template <class T, class = typename T::I> void j(T) {} // { dg-error "this context" } |
| |
| class A |
| { |
| typedef int I; // { dg-message "private" } |
| template <class T, class> friend void f(T); |
| friend void g<A,I>(A); |
| friend void h<A>(A); |
| friend void i<>(A); |
| }; |
| |
| int main() |
| { |
| A a; |
| f(a); |
| g(a); |
| h(a); |
| i(a); |
| j(a); // { dg-error "no match" } |
| } |