18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -fsyntax-only -verify %s
2*c6e68daaSAndy Gibbs // expected-no-diagnostics
31530138fSDouglas Gregor template<typename T, int N>
41530138fSDouglas Gregor struct A;
51530138fSDouglas Gregor 
61530138fSDouglas Gregor template<typename T>
71530138fSDouglas Gregor struct A<T*, 2> {
8e839486dSDouglas Gregor   A(T);
9e839486dSDouglas Gregor   ~A();
10e839486dSDouglas Gregor 
111530138fSDouglas Gregor   void f(T*);
121530138fSDouglas Gregor 
13e839486dSDouglas Gregor   operator T*();
14e839486dSDouglas Gregor 
151530138fSDouglas Gregor   static T value;
161530138fSDouglas Gregor };
171530138fSDouglas Gregor 
f(X *)181530138fSDouglas Gregor template<class X> void A<X*, 2>::f(X*) { }
191530138fSDouglas Gregor 
201530138fSDouglas Gregor template<class X> X A<X*, 2>::value;
21e839486dSDouglas Gregor 
A(X)22e839486dSDouglas Gregor template<class X> A<X*, 2>::A(X) { value = 0; }
23e839486dSDouglas Gregor 
~A()24e839486dSDouglas Gregor template<class X> A<X*, 2>::~A() { }
25e839486dSDouglas Gregor 
operator X*()26e839486dSDouglas Gregor template<class X> A<X*, 2>::operator X*() { return 0; }
27