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 Gregortemplate<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 Gregortemplate<class X> A<X*, 2>::A(X) { value = 0; } 23e839486dSDouglas Gregor ~A()24e839486dSDouglas Gregortemplate<class X> A<X*, 2>::~A() { } 25e839486dSDouglas Gregor operator X*()26e839486dSDouglas Gregortemplate<class X> A<X*, 2>::operator X*() { return 0; } 27