summaryrefslogtreecommitdiff
path: root/test/Modules/Inputs/submodules-merge-defs/defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/Modules/Inputs/submodules-merge-defs/defs.h')
-rw-r--r--test/Modules/Inputs/submodules-merge-defs/defs.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/Modules/Inputs/submodules-merge-defs/defs.h b/test/Modules/Inputs/submodules-merge-defs/defs.h
index 07dfac7ee657f..f6004f0fc8b23 100644
--- a/test/Modules/Inputs/submodules-merge-defs/defs.h
+++ b/test/Modules/Inputs/submodules-merge-defs/defs.h
@@ -5,10 +5,17 @@ class B {
struct Inner1 {};
public:
struct Inner2;
+ struct Inner3;
template<typename T> void f();
};
+struct BFriend {
+ friend class B::Inner3;
+private:
+ struct Inner3Base {};
+};
// Check that lookup and access checks are performed in the right context.
struct B::Inner2 : Inner1 {};
+struct B::Inner3 : BFriend::Inner3Base {};
template<typename T> void B::f() {}
template<> inline void B::f<int>() {}
@@ -97,3 +104,37 @@ namespace MergeFunctionTemplateSpecializations {
enum ScopedEnum : int;
enum ScopedEnum : int { a, b, c };
+
+namespace RedeclDifferentDeclKind {
+ struct X {};
+ typedef X X;
+ using RedeclDifferentDeclKind::X;
+}
+
+namespace Anon {
+ struct X {
+ union {
+ int n;
+ };
+ };
+}
+
+namespace ClassTemplatePartialSpec {
+ template<typename T> struct F;
+ template<template<int> class A, int B> struct F<A<B>> {
+ template<typename C> F();
+ };
+ template<template<int> class A, int B> template<typename C> F<A<B>>::F() {}
+
+ template<typename A, int B> struct F<A[B]> {
+ template<typename C> F();
+ };
+ 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> {};