diff options
author | Douglas Gregor <dgregor@apple.com> | 2008-12-01 23:54:00 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2008-12-01 23:54:00 +0000 |
commit | eb31f39558ce38d227e02b2f7cd85dd368c0d835 (patch) | |
tree | 8348a8e274543748dcd3272725d8c347483a8b81 /clang/test/Parser/cxx-template-decl.cpp | |
parent | 351b6659adab51addbffb87f7caa59ba4fd026f7 (diff) | |
download | bcm5719-llvm-eb31f39558ce38d227e02b2f7cd85dd368c0d835.tar.gz bcm5719-llvm-eb31f39558ce38d227e02b2f7cd85dd368c0d835.zip |
Basic support for parsing templates, from Andrew Sutton
llvm-svn: 60384
Diffstat (limited to 'clang/test/Parser/cxx-template-decl.cpp')
-rw-r--r-- | clang/test/Parser/cxx-template-decl.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/clang/test/Parser/cxx-template-decl.cpp b/clang/test/Parser/cxx-template-decl.cpp new file mode 100644 index 00000000000..abc7bfc6499 --- /dev/null +++ b/clang/test/Parser/cxx-template-decl.cpp @@ -0,0 +1,50 @@ +// RUN: clang -fsyntax-only -verify %s + +// Errors +export class foo { }; // expected-error {{expected template}} +template x; // expected-error {{expected '<' after 'template'}} +export template x; // expected-error {{expected '<' after 'template'}} +template < ; // expected-error {{parse error}} +template <template X> ; // expected-error {{expected '<' after 'template'}} +template <template <typename> > ; // expected-error {{expected 'class' before '>'}} +template <template <typename> Foo> ; // expected-error {{expected 'class' before 'Foo'}} + +// Template function declarations +template <typename T> void foo(); +template <typename T, typename U> void foo(); + +// TODO Implement ParseDeclarationOrFunction() +// Template function definitions. Not done yet. +// template <typename T> void foo() { } + +// Template class (forward) declarations +template <typename T> struct A; +template <typename T, typename U> struct b; +template <typename> struct C; +template <typename, typename> struct D; + +// Forward declarations with default parameters? +template <typename T = int> X1; +template <typename = int> X2; + +// Forward declarations w/template template parameters +template <template <typename> class T> class TTP1; +template <template <typename> class> class TTP2; +template <template <typename> class T = foo> TTP3; +template <template <typename> class = foo> TTP3; +template <template <typename X, typename Y> class T> TTP5; + +// Forward declararations with non-type params +template <int> class NTP0; +template <int N> class NTP1; +template <int N = 5> class NTP2; +template <int = 10> class NTP3; +template <unsigned int N = 12u> NTP4;; +template <unsigned int = 12u> NTP5; +template <unsigned = 15u> NTP6; +template <typename T, T Obj> NTP7; // expected-error {{parse error}} + +// Template class declarations +template <typename T> struct A { }; +template <typename T, typename U> struct B { }; + |