// PR c++/35146 template <typename T> struct S {}; template <typename R> struct ref; template <> struct ref<double> { typedef double result; }; template <typename T> void foo(typename ref<T>::result, S<T>*); template <> void foo(S<double>, S<double>*); // { dg-error "does not match" } template <> void foo(double alpha, S<double>* x) { alpha; x; }