10c1065faSRichard Smith template<typename> struct MergeSpecializations; 20c1065faSRichard Smith template<typename T> struct MergeSpecializations<T[]> { 30c1065faSRichard Smith typedef int partially_specialized_in_c; 40c1065faSRichard Smith }; 50c1065faSRichard Smith template<> struct MergeSpecializations<bool> { 60c1065faSRichard Smith typedef int explicitly_specialized_in_c; 70c1065faSRichard Smith }; 8547864d2SRichard Smith 9547864d2SRichard Smith template<typename T> struct MergeTemplateDefinitions { 10547864d2SRichard Smith static constexpr int f(); 11547864d2SRichard Smith static constexpr int g(); 12547864d2SRichard Smith }; 13547864d2SRichard Smith template<typename T> constexpr int MergeTemplateDefinitions<T>::g() { return 2; } 14337f7c97SRichard Smith 15337f7c97SRichard Smith template<typename T1 = int> 16337f7c97SRichard Smith struct MergeAnonUnionMember { 17337f7c97SRichard Smith MergeAnonUnionMember() { (void)values.t1; } 18337f7c97SRichard Smith union { int t1; } values; 19337f7c97SRichard Smith }; 20337f7c97SRichard Smith inline MergeAnonUnionMember<> maum_c() { return {}; } 2141c79d93SRichard Smith 2241c79d93SRichard Smith template<typename T> struct DontWalkPreviousDeclAfterMerging { struct Inner { typedef T type; }; }; 2341c79d93SRichard Smith typedef DontWalkPreviousDeclAfterMerging<char>::Inner dwpdam_typedef; 24*6377f8f7SRichard Smith 25*6377f8f7SRichard Smith namespace TestInjectedClassName { 26*6377f8f7SRichard Smith template<typename T> struct X { X(); }; 27*6377f8f7SRichard Smith typedef X<char[3]> C; 28*6377f8f7SRichard Smith } 29