diff options
Diffstat (limited to 'test/SemaTemplate/instantiate-member-expr.cpp')
-rw-r--r-- | test/SemaTemplate/instantiate-member-expr.cpp | 17 |
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 +} |