summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaTemplate/dependent-base-classes.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-01-12 21:28:44 +0000
committerDouglas Gregor <dgregor@apple.com>2010-01-12 21:28:44 +0000
commit18473f329dbd23a888fd09b39ea3832e42ce1604 (patch)
treecd08d17e1e210dac0aa2596cabfeece746c93922 /clang/test/SemaTemplate/dependent-base-classes.cpp
parentfaa5417264d4fd3ec923b72f18a78c95a6ae143d (diff)
downloadbcm5719-llvm-18473f329dbd23a888fd09b39ea3832e42ce1604.tar.gz
bcm5719-llvm-18473f329dbd23a888fd09b39ea3832e42ce1604.zip
Improve recovery for template-ids whose template-name doesn't actually
name a template, when they occur in a base-specifier. This is one of the (few) places where we know for sure that an identifier followed by a '<' must be a template name, so we can diagnose and recover well: test/SemaTemplate/dependent-base-classes.cpp:9:16: error: missing 'template' keyword prior to dependent template name 'T::apply' struct X1 : T::apply<U> { }; // expected-error{{missing 'template' ... ^ template test/SemaTemplate/dependent-base-classes.cpp:12:13: error: unknown template name 'vector' struct X2 : vector<T> { }; // expected-error{{unknown template name 'vector'}} ^ 2 diagnostics generated. llvm-svn: 93257
Diffstat (limited to 'clang/test/SemaTemplate/dependent-base-classes.cpp')
-rw-r--r--clang/test/SemaTemplate/dependent-base-classes.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/dependent-base-classes.cpp b/clang/test/SemaTemplate/dependent-base-classes.cpp
index 56979209ea1..242765894f7 100644
--- a/clang/test/SemaTemplate/dependent-base-classes.cpp
+++ b/clang/test/SemaTemplate/dependent-base-classes.cpp
@@ -4,3 +4,9 @@ template<typename T, typename U>
struct X0 : T::template apply<U> {
X0(U u) : T::template apply<U>(u) { }
};
+
+template<typename T, typename U>
+struct X1 : T::apply<U> { }; // expected-error{{missing 'template' keyword prior to dependent template name 'T::apply'}}
+
+template<typename T>
+struct X2 : vector<T> { }; // expected-error{{unknown template name 'vector'}}
OpenPOWER on IntegriCloud