1 template<typename> struct MergeSpecializations;
2 template<typename T> struct MergeSpecializations<T[]> {
3   typedef int partially_specialized_in_c;
4 };
5 template<> struct MergeSpecializations<bool> {
6   typedef int explicitly_specialized_in_c;
7 };
8 
9 template<typename T> struct MergeTemplateDefinitions {
10   static constexpr int f();
11   static constexpr int g();
12 };
13 template<typename T> constexpr int MergeTemplateDefinitions<T>::g() { return 2; }
14 
15 template<typename T1 = int>
16 struct MergeAnonUnionMember {
17   MergeAnonUnionMember() { (void)values.t1; }
18   union { int t1; } values;
19 };
20 inline MergeAnonUnionMember<> maum_c() { return {}; }
21 
22 template<typename T> struct DontWalkPreviousDeclAfterMerging { struct Inner { typedef T type; }; };
23 typedef DontWalkPreviousDeclAfterMerging<char>::Inner dwpdam_typedef;
24 
25 namespace TestInjectedClassName {
26   template<typename T> struct X { X(); };
27   typedef X<char[3]> C;
28 }
29