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