| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| // expected-no-diagnostics |
| |
| template<class T> class Array { /* ... */ }; |
| template<class T> void sort(Array<T>& v) { } |
| |
| // instantiate sort(Array<int>&) - template-argument deduced |
| template void sort<>(Array<int>&); |
| |
| template void sort(Array<long>&); |
| |
| template<typename T, typename U> void f0(T, U*) { } |
| |
| template void f0<int>(int, float*); |
| template void f0<>(double, float*); |
| |
| template<typename T> struct hash { }; |
| struct S { |
| bool operator==(const S&) const { return false; } |
| }; |
| |
| template<typename T> struct Hash_map { |
| void Method(const T& x) { h(x); } |
| hash<T> h; |
| }; |
| |
| Hash_map<S> *x; |
| const Hash_map<S> *foo() { |
| return x; |
| } |
| |
| template<> struct hash<S> { |
| int operator()(const S& k) const { |
| return 0; |
| } |
| }; |