1 // PR c++/35146
2 
3 template <typename T> struct S {};
4 
5 template <typename R> struct ref;
6 template <>           struct ref<double> { typedef double result; };
7 
8 template <typename T>
9 void foo(typename ref<T>::result, S<T>*);
10 template <>
11 void foo(S<double>,               S<double>*); // { dg-error "does not match" }
12 template <>
13 void foo(double alpha,            S<double>* x)
14 {
15   alpha; x;
16 }
17