diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp | 26 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/submodules-merge-defs/defs.h | 7 |
2 files changed, 33 insertions, 0 deletions
diff --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp new file mode 100644 index 00000000000..e3982fd6a83 --- /dev/null +++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -verify %s -std=c++11 + +namespace N { + struct A; + template<typename T> struct B {}; +} +template<typename T> struct C {}; +struct D { + template<typename T> struct A {}; +}; +struct N::A; // expected-error {{cannot have a nested name specifier}} + +template<typename T> struct N::B; // expected-error {{cannot have a nested name specifier}} +template<typename T> struct N::B<T*>; // FIXME: This is technically ill-formed, but that's not the intent. +template<> struct N::B<int>; +template struct N::B<float>; + +template<typename T> struct C; +template<typename T> struct C<T*>; // FIXME: This is technically ill-formed, but that's not the intent. +template<> struct C<int>; +template struct C<float>; + +template<typename T> struct D::A; // expected-error {{cannot have a nested name specifier}} +template<typename T> struct D::A<T*>; // FIXME: This is technically ill-formed, but that's not the intent. +template<> struct D::A<int>; +template struct D::A<float>; diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/defs.h b/clang/test/Modules/Inputs/submodules-merge-defs/defs.h index e9d72847191..f6004f0fc8b 100644 --- a/clang/test/Modules/Inputs/submodules-merge-defs/defs.h +++ b/clang/test/Modules/Inputs/submodules-merge-defs/defs.h @@ -131,3 +131,10 @@ namespace ClassTemplatePartialSpec { }; template<typename A, int B> template<typename C> F<A[B]>::F() {} } + +struct MemberClassTemplate { + template<typename T> struct A; +}; +template<typename T> struct MemberClassTemplate::A {}; +template<typename T> struct MemberClassTemplate::A<T*> {}; +template<> struct MemberClassTemplate::A<int> {}; |