// RUN: %clang_cc1 -verify %s template<typename T> void f0() { struct X; typedef struct Y { T (X::* f1())(int) { return 0; } } Y2; Y2 y = Y(); } template void f0<int>(); // PR5764 namespace PR5764 { struct X { template <typename T> void Bar() { typedef T ValueType; struct Y { Y() { V = ValueType(); } ValueType V; }; Y y; } }; void test(X x) { x.Bar<int>(); } } // Instantiation of local classes with virtual functions. namespace local_class_with_virtual_functions { template <typename T> struct X { }; template <typename T> struct Y { }; template <typename T> void f() { struct Z : public X<Y<T>*> { virtual void g(Y<T>* y) { } void g2(int x) {(void)x;} }; Z z; (void)z; } struct S { }; void test() { f<S>(); } } namespace PR8801 { template<typename T> void foo() { class X; typedef int (X::*pmf_type)(); class X : public T { }; pmf_type pmf = &T::foo; } struct Y { int foo(); }; template void foo<Y>(); }