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