xref: /llvm-project/clang/test/Modules/Inputs/cxx-templates-c.h (revision 6377f8f7fb1f0ed32fd80acf733659fb7982011b)
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