summaryrefslogtreecommitdiff
path: root/test/SemaTemplate/instantiate-member-expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaTemplate/instantiate-member-expr.cpp')
-rw-r--r--test/SemaTemplate/instantiate-member-expr.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/test/SemaTemplate/instantiate-member-expr.cpp b/test/SemaTemplate/instantiate-member-expr.cpp
index a31569a0c3952..6ba94b28df622 100644
--- a/test/SemaTemplate/instantiate-member-expr.cpp
+++ b/test/SemaTemplate/instantiate-member-expr.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fsyntax-only -verify %s -pedantic
template<typename T>
struct S {
S() { }
@@ -66,3 +66,18 @@ namespace test2 {
template class B<int>;
}
+
+namespace PR14124 {
+ template<typename T> struct S {
+ int value;
+ };
+ template<typename T> void f() { S<T>::value; } // expected-error {{invalid use of non-static data member 'value'}}
+ template void f<int>(); // expected-note {{in instantiation of}}
+
+ struct List { List *next; };
+ template<typename T, T *(T::*p) = &T::next> struct A {};
+ A<List> a; // ok
+ void operator&(struct Whatever);
+ template<typename T, T *(T::*p) = &T::next> struct B {};
+ B<List> b; // still ok
+}