1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | // expected-no-diagnostics |
3 | |
4 | template<class T> class Array { /* ... */ }; |
5 | template<class T> void sort(Array<T>& v) { } |
6 | |
7 | // instantiate sort(Array<int>&) - template-argument deduced |
8 | template void sort<>(Array<int>&); |
9 | |
10 | template void sort(Array<long>&); |
11 | |
12 | template<typename T, typename U> void f0(T, U*) { } |
13 | |
14 | template void f0<int>(int, float*); |
15 | template void f0<>(double, float*); |
16 | |
17 | template<typename T> struct hash { }; |
18 | struct S { |
19 | bool operator==(const S&) const { return false; } |
20 | }; |
21 | |
22 | template<typename T> struct Hash_map { |
23 | void Method(const T& x) { h(x); } |
24 | hash<T> h; |
25 | }; |
26 | |
27 | Hash_map<S> *x; |
28 | const Hash_map<S> *foo() { |
29 | return x; |
30 | } |
31 | |
32 | template<> struct hash<S> { |
33 | int operator()(const S& k) const { |
34 | return 0; |
35 | } |
36 | }; |
37 | |