xref: /llvm-project/clang/test/Modules/Inputs/templates-right.h (revision 842e46e606b13e29b4136a455ad5d77249a7f9f4)
1c50d4924SDouglas Gregor @import templates_top;
263469422SAxel Naumann 
363469422SAxel Naumann template<typename T> class Vector {
463469422SAxel Naumann public:
563469422SAxel Naumann   void push_back(const T&);
663469422SAxel Naumann };
763469422SAxel Naumann 
863469422SAxel Naumann template<typename T> class List;
963469422SAxel Naumann template<> class List<bool> {
1063469422SAxel Naumann public:
1163469422SAxel Naumann   void push_back(int);
1263469422SAxel Naumann };
1363469422SAxel Naumann 
1463469422SAxel Naumann namespace N {
1563469422SAxel Naumann   template<typename T> class Set {
1663469422SAxel Naumann   public:
1763469422SAxel Naumann     void insert(T);
1863469422SAxel Naumann   };
1963469422SAxel Naumann }
2063469422SAxel Naumann 
210b87e073SRichard Smith constexpr unsigned List<int>::*size_right = &List<int>::size;
220b87e073SRichard Smith List<int> list_right = { 0, 12 };
230b87e073SRichard Smith typedef List<int> ListInt_right;
240b87e073SRichard Smith 
2563469422SAxel Naumann template <typename T>
pendingInstantiationEmit(T)26d9a25b3cSAxel Naumann void pendingInstantiationEmit(T) {}
triggerPendingInstantiationToo()2763469422SAxel Naumann void triggerPendingInstantiationToo() {
28d9a25b3cSAxel Naumann   pendingInstantiationEmit(12);
2963469422SAxel Naumann }
30d9a25b3cSAxel Naumann 
redeclDefinitionEmit()31d9a25b3cSAxel Naumann void redeclDefinitionEmit(){}
32d55889a6SRichard Smith 
33d55889a6SRichard Smith typedef Outer<int>::Inner OuterIntInner_right;
34cd45dbc5SRichard Smith 
defineListDoubleRight()35cd45dbc5SRichard Smith int defineListDoubleRight() {
36cd45dbc5SRichard Smith   List<double> ld;
37cd45dbc5SRichard Smith   ld.push_back(0.0);
38cd45dbc5SRichard Smith   return ld.size;
39cd45dbc5SRichard Smith }
40f17fdbd7SRichard Smith 
defineListLongRight()419c9173dcSRichard Smith inline void defineListLongRight() {
429c9173dcSRichard Smith   List<long> ll;
439c9173dcSRichard Smith }
449c9173dcSRichard Smith 
45f17fdbd7SRichard Smith template<typename T> struct MergePatternDecl;
46195d8ef4SRichard Smith 
47195d8ef4SRichard Smith void outOfLineInlineUseRightF(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::f);
48195d8ef4SRichard Smith void outOfLineInlineUseRightG(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::g);
49195d8ef4SRichard Smith void outOfLineInlineUseRightH(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::h);
5073b21d8fSRichard Smith 
getStaticDataMemberRight()5173b21d8fSRichard Smith inline int *getStaticDataMemberRight() {
5273b21d8fSRichard Smith   return WithUndefinedStaticDataMember<int[]>::undefined;
5373b21d8fSRichard Smith }
54*842e46e6SRichard Smith 
make_with_attributes_right()55*842e46e6SRichard Smith inline WithAttributes<int> make_with_attributes_right() { return WithAttributes<int>(); }
56