// { dg-do compile }
// PR c++/3663
// Enforce access of nested type.
template <typename A>
class S {
  class T {};				// { dg-message "private" }
};
template <typename A>
typename A::T* f (A) {			// { dg-error "this context" }
  return 0;
}
void g () {
  f (S<int> ());			// { dg-message "required|no match" }
}