the base class. If the base class deduction succeeds, use those results. If it fails, keep using the results from the derived class template deduction. This prevents an assertion later where the type of deduction failure doesn't match up with the template deduction info. llvm-svn: 167550
13 lines
664 B
C++
13 lines
664 B
C++
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
|
|
|
template<typename T> class vector2 {};
|
|
template<typename T> class vector : vector2<T> {};
|
|
|
|
template<typename T> void Foo2(vector2<const T*> V) {} // expected-note{{candidate template ignored: can't deduce a type for 'T' which would make 'const T' equal 'int'}}
|
|
template<typename T> void Foo(vector<const T*> V) {} // expected-note {{candidate template ignored: can't deduce a type for 'T' which would make 'const T' equal 'int'}}
|
|
|
|
void test() {
|
|
Foo2(vector2<int*>()); // expected-error{{no matching function for call to 'Foo2'}}
|
|
Foo(vector<int*>()); // expected-error{{no matching function for call to 'Foo'}}
|
|
}
|