diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-10-27 15:00:12 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-10-27 15:00:12 +0000 |
commit | e46c7f524297452e1c9800792e403beca6c92a1a (patch) | |
tree | 3c9984887018a7144ca8961cff98307106578d1e | |
parent | 838b04871270b37c99a43dda2527f3e96b3331ff (diff) |
Test various aspects of explicit instantiation that were already implemented.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@85243 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/CXX/temp/temp.spec/temp.explicit/p12.cpp | 6 | ||||
-rw-r--r-- | test/CXX/temp/temp.spec/temp.explicit/p5.cpp | 18 | ||||
-rw-r--r-- | test/CXX/temp/temp.spec/temp.explicit/p6.cpp | 14 |
3 files changed, 38 insertions, 0 deletions
diff --git a/test/CXX/temp/temp.spec/temp.explicit/p12.cpp b/test/CXX/temp/temp.spec/temp.explicit/p12.cpp new file mode 100644 index 0000000000..fdf4393d43 --- /dev/null +++ b/test/CXX/temp/temp.spec/temp.explicit/p12.cpp @@ -0,0 +1,6 @@ +// RUN: clang-cc -fsyntax-only -verify %s + +char* p = 0; +template<class T> T g(T x = &p) { return x; } +template int g<int>(int); // OK even though &p isn’t an int. + diff --git a/test/CXX/temp/temp.spec/temp.explicit/p5.cpp b/test/CXX/temp/temp.spec/temp.explicit/p5.cpp new file mode 100644 index 0000000000..ee75602770 --- /dev/null +++ b/test/CXX/temp/temp.spec/temp.explicit/p5.cpp @@ -0,0 +1,18 @@ +// RUN: clang-cc -fsyntax-only -verify %s + +namespace N { + template<class T> class Y { // expected-note{{explicit instantiation refers here}} + void mf() { } + }; +} + +// FIXME: poor diagnostic +template class Z<int>; // expected-error{{unqualified-id}} + +// FIXME: This example from the standard is wrong; note posted to CWG reflector +// on 10/27/2009 +using N::Y; +template class Y<int>; // expected-error{{must occur in}} + +template class N::Y<char*>; +template void N::Y<double>::mf(); diff --git a/test/CXX/temp/temp.spec/temp.explicit/p6.cpp b/test/CXX/temp/temp.spec/temp.explicit/p6.cpp new file mode 100644 index 0000000000..763d679db7 --- /dev/null +++ b/test/CXX/temp/temp.spec/temp.explicit/p6.cpp @@ -0,0 +1,14 @@ +// RUN: clang-cc -fsyntax-only -verify %s + +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*); |