37 lines
763 B
C++
37 lines
763 B
C++
|
// 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;
|
||
|
}
|
||
|
};
|