• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -std=c++11 %s -emit-llvm -o - | FileCheck %s
2 
3 // CHECK: private unnamed_addr constant [15 x i8] c"externFunction\00"
4 // CHECK: private unnamed_addr constant [26 x i8] c"void NS::externFunction()\00"
5 // CHECK: private unnamed_addr constant [49 x i8] c"void functionTemplateExplicitSpecialization(int)\00"
6 
7 // CHECK: private unnamed_addr constant [95 x i8] c"void SpecializedClassTemplate<char>::memberFunctionTemplate(T, U) const [T = char, U = double]\00"
8 // CHECK: private unnamed_addr constant [85 x i8] c"void SpecializedClassTemplate<int>::memberFunctionTemplate(int, U) const [U = float]\00"
9 // CHECK: private unnamed_addr constant [57 x i8] c"void NonTypeTemplateParam<42>::size() const [Count = 42]\00"
10 // CHECK: private unnamed_addr constant [122 x i8] c"static void ClassWithTemplateTemplateParam<char, NS::ClassTemplate>::staticMember() [T = char, Param = NS::ClassTemplate]\00"
11 // CHECK: private unnamed_addr constant [106 x i8] c"void OuterClass<int *>::MiddleClass::InnerClass<float>::memberFunction(T, U) const [T = int *, U = float]\00"
12 // CHECK: private unnamed_addr constant [65 x i8] c"void functionTemplateWithUnnamedTemplateParameter(T) [T = float]\00"
13 
14 // CHECK: private unnamed_addr constant [60 x i8] c"void functionTemplateExplicitSpecialization(T) [T = double]\00"
15 // CHECK: private unnamed_addr constant [52 x i8] c"T *functionTemplateWithCompoundTypes(T *) [T = int]\00"
16 // CHECK: private unnamed_addr constant [54 x i8] c"T functionTemplateWithTemplateReturnType() [T = char]\00"
17 // CHECK: private unnamed_addr constant [57 x i8] c"void functionTemplateWithoutParameterList() [T = double]\00"
18 // CHECK: private unnamed_addr constant [62 x i8] c"void functionTemplateWithTwoParams(T, U) [T = int, U = float]\00"
19 
20 // CHECK: private unnamed_addr constant [22 x i8] c"classTemplateFunction\00"
21 // CHECK: private unnamed_addr constant [77 x i8] c"void NS::ClassTemplate<NS::Base *>::classTemplateFunction() [T = NS::Base *]\00"
22 // CHECK: private unnamed_addr constant [63 x i8] c"void NS::ClassTemplate<int>::classTemplateFunction() [T = int]\00"
23 
24 // CHECK: private unnamed_addr constant [18 x i8] c"functionTemplate1\00"
25 // CHECK: private unnamed_addr constant [53 x i8] c"void NS::Base::functionTemplate1(T) [T = NS::Base *]\00"
26 // CHECK: private unnamed_addr constant [46 x i8] c"void NS::Base::functionTemplate1(T) [T = int]\00"
27 
28 // CHECK: private unnamed_addr constant [23 x i8] c"anonymousUnionFunction\00"
29 // CHECK: private unnamed_addr constant [83 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous union>::anonymousUnionFunction()\00"
30 
31 // CHECK: private unnamed_addr constant [24 x i8] c"anonymousStructFunction\00"
32 // CHECK: private unnamed_addr constant [85 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous struct>::anonymousStructFunction()\00"
33 
34 // CHECK: private unnamed_addr constant [23 x i8] c"anonymousClassFunction\00"
35 // CHECK: private unnamed_addr constant [83 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous class>::anonymousClassFunction()\00"
36 
37 // CHECK: private unnamed_addr constant [12 x i8] c"~Destructor\00"
38 // CHECK: private unnamed_addr constant [30 x i8] c"NS::Destructor::~Destructor()\00"
39 
40 // CHECK: private unnamed_addr constant [12 x i8] c"Constructor\00"
41 // CHECK: private unnamed_addr constant [41 x i8] c"NS::Constructor::Constructor(NS::Base *)\00"
42 // CHECK: private unnamed_addr constant [34 x i8] c"NS::Constructor::Constructor(int)\00"
43 // CHECK: private unnamed_addr constant [31 x i8] c"NS::Constructor::Constructor()\00"
44 
45 // CHECK: private unnamed_addr constant [16 x i8] c"virtualFunction\00"
46 // CHECK: private unnamed_addr constant [44 x i8] c"virtual void NS::Derived::virtualFunction()\00"
47 
48 // CHECK: private unnamed_addr constant [21 x i8] c"refQualifiedFunction\00"
49 // CHECK: private unnamed_addr constant [41 x i8] c"void NS::Base::refQualifiedFunction() &&\00"
50 // CHECK: private unnamed_addr constant [40 x i8] c"void NS::Base::refQualifiedFunction() &\00"
51 
52 // CHECK: private unnamed_addr constant [22 x i8] c"constVolatileFunction\00"
53 // CHECK: private unnamed_addr constant [54 x i8] c"void NS::Base::constVolatileFunction() const volatile\00"
54 
55 // CHECK: private unnamed_addr constant [17 x i8] c"volatileFunction\00"
56 // CHECK: private unnamed_addr constant [43 x i8] c"void NS::Base::volatileFunction() volatile\00"
57 
58 // CHECK: private unnamed_addr constant [14 x i8] c"constFunction\00"
59 // CHECK: private unnamed_addr constant [37 x i8] c"void NS::Base::constFunction() const\00"
60 
61 // CHECK: private unnamed_addr constant [26 x i8] c"functionReturingTemplate2\00"
62 // CHECK: private unnamed_addr constant [64 x i8] c"ClassTemplate<NS::Base *> NS::Base::functionReturingTemplate2()\00"
63 
64 // CHECK: private unnamed_addr constant [26 x i8] c"functionReturingTemplate1\00"
65 // CHECK: private unnamed_addr constant [57 x i8] c"ClassTemplate<int> NS::Base::functionReturingTemplate1()\00"
66 
67 // CHECK: private unnamed_addr constant [23 x i8] c"withTemplateParameter2\00"
68 // CHECK: private unnamed_addr constant [65 x i8] c"void NS::Base::withTemplateParameter2(ClassTemplate<NS::Base *>)\00"
69 
70 // CHECK: private unnamed_addr constant [23 x i8] c"withTemplateParameter1\00"
71 // CHECK: private unnamed_addr constant [58 x i8] c"void NS::Base::withTemplateParameter1(ClassTemplate<int>)\00"
72 
73 // CHECK: private unnamed_addr constant [23 x i8] c"functionReturningClass\00"
74 // CHECK: private unnamed_addr constant [45 x i8] c"NS::Base *NS::Base::functionReturningClass()\00"
75 
76 // CHECK: private unnamed_addr constant [23 x i8] c"functionWithParameters\00"
77 // CHECK: private unnamed_addr constant [64 x i8] c"void NS::Base::functionWithParameters(int, float *, NS::Base *)\00"
78 
79 // CHECK: private unnamed_addr constant [17 x i8] c"variadicFunction\00"
80 // CHECK: private unnamed_addr constant [42 x i8] c"void NS::Base::variadicFunction(int, ...)\00"
81 
82 // CHECK: private unnamed_addr constant [41 x i8] c"virtual void NS::Base::virtualFunction()\00"
83 
84 // CHECK: private unnamed_addr constant [15 x i8] c"inlineFunction\00"
85 // CHECK: private unnamed_addr constant [32 x i8] c"void NS::Base::inlineFunction()\00"
86 
87 // CHECK: private unnamed_addr constant [15 x i8] c"staticFunction\00"
88 // CHECK: private unnamed_addr constant [39 x i8] c"static void NS::Base::staticFunction()\00"
89 
90 // CHECK: private unnamed_addr constant [26 x i8] c"topLevelNamespaceFunction\00"
91 // CHECK: private unnamed_addr constant [59 x i8] c"void ClassInTopLevelNamespace::topLevelNamespaceFunction()\00"
92 
93 // CHECK: private unnamed_addr constant [27 x i8] c"anonymousNamespaceFunction\00"
94 // CHECK: private unnamed_addr constant [84 x i8] c"void <anonymous namespace>::ClassInAnonymousNamespace::anonymousNamespaceFunction()\00"
95 
96 // CHECK: private unnamed_addr constant [19 x i8] c"localClassFunction\00"
97 // CHECK: private unnamed_addr constant [59 x i8] c"void NS::localClass(int)::LocalClass::localClassFunction()\00"
98 
99 
100 
101 int printf(const char * _Format, ...);
102 
103 class ClassInTopLevelNamespace {
104 public:
topLevelNamespaceFunction()105   void topLevelNamespaceFunction() {
106     printf("__func__ %s\n", __func__);
107     printf("__FUNCTION__ %s\n", __FUNCTION__);
108     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
109   }
110 };
111 
112 namespace {
113 
114   class ClassInAnonymousNamespace {
115   public:
anonymousNamespaceFunction()116     void anonymousNamespaceFunction() {
117       printf("__func__ %s\n", __func__);
118       printf("__FUNCTION__ %s\n", __FUNCTION__);
119       printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
120     }
121   };
122 
123 } // end anonymous namespace
124 
125 namespace NS {
126 
127 template<typename T>
128 class ClassTemplate {
129 public:
classTemplateFunction()130   void classTemplateFunction() {
131     printf("__func__ %s\n", __func__);
132     printf("__FUNCTION__ %s\n", __FUNCTION__);
133     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
134   }
135 };
136 
137 class Base {
138 public:
staticFunction()139   static void staticFunction() {
140     printf("__func__ %s\n", __func__);
141     printf("__FUNCTION__ %s\n", __FUNCTION__);
142     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
143   }
144 
inlineFunction()145   inline void inlineFunction() {
146     printf("__func__ %s\n", __func__);
147     printf("__FUNCTION__ %s\n", __FUNCTION__);
148     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
149   }
150 
virtualFunction()151   virtual void virtualFunction() {
152     printf("__func__ %s\n", __func__);
153     printf("__FUNCTION__ %s\n", __FUNCTION__);
154     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
155   }
156 
functionWithParameters(int,float *,Base * base)157   void functionWithParameters(int, float*, Base* base) {
158     printf("__func__ %s\n", __func__);
159     printf("__FUNCTION__ %s\n", __FUNCTION__);
160     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
161   }
162 
functionReturningClass()163   Base *functionReturningClass() {
164     printf("__func__ %s\n", __func__);
165     printf("__FUNCTION__ %s\n", __FUNCTION__);
166     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
167     return 0;
168   }
169 
variadicFunction(int,...)170   void variadicFunction(int, ...) {
171     printf("__func__ %s\n", __func__);
172     printf("__FUNCTION__ %s\n", __FUNCTION__);
173     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
174   }
175 
withTemplateParameter1(ClassTemplate<int>)176   void withTemplateParameter1(ClassTemplate<int>) {
177     printf("__func__ %s\n", __func__);
178     printf("__FUNCTION__ %s\n", __FUNCTION__);
179     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
180   }
181 
withTemplateParameter2(ClassTemplate<Base * >)182   void withTemplateParameter2(ClassTemplate<Base *>) {
183     printf("__func__ %s\n", __func__);
184     printf("__FUNCTION__ %s\n", __FUNCTION__);
185     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
186   }
187 
functionReturingTemplate1()188   ClassTemplate<int> functionReturingTemplate1() {
189     printf("__func__ %s\n", __func__);
190     printf("__FUNCTION__ %s\n", __FUNCTION__);
191     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
192     return ClassTemplate<int>();
193   }
194 
functionReturingTemplate2()195   ClassTemplate<Base *> functionReturingTemplate2() {
196     printf("__func__ %s\n", __func__);
197     printf("__FUNCTION__ %s\n", __FUNCTION__);
198     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
199     return ClassTemplate<Base *>();
200   }
201 
202   template<typename T>
functionTemplate1(T t)203   void functionTemplate1(T t) {
204     printf("__func__ %s\n", __func__);
205     printf("__FUNCTION__ %s\n", __FUNCTION__);
206     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
207   }
208 
constFunction() const209   void constFunction() const {
210     printf("__func__ %s\n", __func__);
211     printf("__FUNCTION__ %s\n", __FUNCTION__);
212     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
213   }
214 
volatileFunction()215   void volatileFunction() volatile {
216     printf("__func__ %s\n", __func__);
217     printf("__FUNCTION__ %s\n", __FUNCTION__);
218     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
219   }
220 
constVolatileFunction() const221   void constVolatileFunction() const volatile {
222     printf("__func__ %s\n", __func__);
223     printf("__FUNCTION__ %s\n", __FUNCTION__);
224     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
225   }
226 
refQualifiedFunction()227   void refQualifiedFunction() & {
228     printf("__func__ %s\n", __func__);
229     printf("__FUNCTION__ %s\n", __FUNCTION__);
230     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
231   }
232 
refQualifiedFunction()233   void refQualifiedFunction() && {
234     printf("__func__ %s\n", __func__);
235     printf("__FUNCTION__ %s\n", __FUNCTION__);
236     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
237   }
238 };
239 
240 class Derived : public Base {
241 public:
242   // Virtual function without being explicitly written.
virtualFunction()243   void virtualFunction() {
244     printf("__func__ %s\n", __func__);
245     printf("__FUNCTION__ %s\n", __FUNCTION__);
246     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
247   }
248 };
249 
250 class Constructor {
251 public:
Constructor()252   Constructor() {
253     printf("__func__ %s\n", __func__);
254     printf("__FUNCTION__ %s\n", __FUNCTION__);
255     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
256   }
257 
Constructor(int)258   Constructor(int) {
259     printf("__func__ %s\n", __func__);
260     printf("__FUNCTION__ %s\n", __FUNCTION__);
261     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
262   }
263 
Constructor(Base *)264   Constructor(Base *) {
265     printf("__func__ %s\n", __func__);
266     printf("__FUNCTION__ %s\n", __FUNCTION__);
267     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
268   }
269 };
270 
271 class Destructor {
272 public:
~Destructor()273   ~Destructor() {
274     printf("__func__ %s\n", __func__);
275     printf("__FUNCTION__ %s\n", __FUNCTION__);
276     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
277   }
278 };
279 
280 class ContainerForAnonymousRecords {
281 public:
282   class {
283   public:
anonymousClassFunction()284     void anonymousClassFunction() {
285       printf("__func__ %s\n", __func__);
286       printf("__FUNCTION__ %s\n", __FUNCTION__);
287       printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
288     }
289   } anonymousClass;
290 
291   struct {
anonymousStructFunctionNS::ContainerForAnonymousRecords::__anon0ba848440308292     void anonymousStructFunction() {
293       printf("__func__ %s\n", __func__);
294       printf("__FUNCTION__ %s\n", __FUNCTION__);
295       printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
296     }
297   } anonymousStruct;
298 
299   union {
anonymousUnionFunction()300     void anonymousUnionFunction() {
301       printf("__func__ %s\n", __func__);
302       printf("__FUNCTION__ %s\n", __FUNCTION__);
303       printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
304     }
305   } anonymousUnion;
306 };
307 
localClass(int)308 void localClass(int) {
309   class LocalClass {
310   public:
311     void localClassFunction() {
312       printf("__func__ %s\n", __func__);
313       printf("__FUNCTION__ %s\n", __FUNCTION__);
314       printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
315     }
316   };
317   LocalClass lc;
318   lc.localClassFunction();
319 }
320 
externFunction()321 extern void externFunction() {
322   printf("__func__ %s\n", __func__);
323   printf("__FUNCTION__ %s\n", __FUNCTION__);
324   printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
325 }
326 
327 } // end NS namespace
328 
329 // additional tests for __PRETTY_FUNCTION__
330 template <typename T, typename U>
functionTemplateWithTwoParams(T,U)331 void functionTemplateWithTwoParams(T, U)
332 {
333   printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
334 }
335 
336 template <typename T>
functionTemplateWithoutParameterList()337 void functionTemplateWithoutParameterList()
338 {
339   T t = T();
340 
341   printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
342 }
343 
344 template <typename T>
functionTemplateWithTemplateReturnType()345 T functionTemplateWithTemplateReturnType()
346 {
347   printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
348 
349   return T();
350 }
351 
352 template <typename T>
functionTemplateWithCompoundTypes(T a[])353 T * functionTemplateWithCompoundTypes(T a[])
354 {
355   printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
356 
357   return 0;
358 }
359 
360 template <typename T>
functionTemplateExplicitSpecialization(T t)361 void functionTemplateExplicitSpecialization(T t)
362 {
363   printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
364 }
365 
366 template <>
functionTemplateExplicitSpecialization(int i)367 void functionTemplateExplicitSpecialization<int>(int i)
368 {
369   printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
370 }
371 
372 template <typename, typename T>
functionTemplateWithUnnamedTemplateParameter(T t)373 void functionTemplateWithUnnamedTemplateParameter(T t)
374 {
375   printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
376 }
377 
378 template <typename T>
379 class OuterClass
380 {
381 public:
382   class MiddleClass
383   {
384   public:
385     template <typename U>
386     class InnerClass
387     {
388     public:
memberFunction(T x,U y) const389       void memberFunction(T x, U y) const
390       {
391         printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
392       }
393     };
394   };
395 };
396 
397 template <typename T, template <typename> class Param = NS::ClassTemplate>
398 class ClassWithTemplateTemplateParam
399 {
400 public:
staticMember()401   static void staticMember()
402   {
403     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
404   }
405 };
406 
407 template <int Count>
408 class NonTypeTemplateParam
409 {
410 public:
size() const411   void size() const
412   {
413     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
414   }
415 };
416 
417 template <typename T>
418 class SpecializedClassTemplate
419 {
420 public:
421   template <typename U>
memberFunctionTemplate(T t,U u) const422   void memberFunctionTemplate(T t, U u) const
423   {
424     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
425   }
426 };
427 
428 template <>
429 class SpecializedClassTemplate<int>
430 {
431 public:
432   template <typename U>
memberFunctionTemplate(int i,U u) const433   void memberFunctionTemplate(int i, U u) const
434   {
435     printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
436   }
437 };
438 
main()439 int main() {
440   ClassInAnonymousNamespace anonymousNamespace;
441   anonymousNamespace.anonymousNamespaceFunction();
442 
443   ClassInTopLevelNamespace topLevelNamespace;
444   topLevelNamespace.topLevelNamespaceFunction();
445 
446   NS::Base::staticFunction();
447 
448   NS::Base b;
449   b.inlineFunction();
450   b.virtualFunction();
451   b.variadicFunction(0);
452   b.functionWithParameters(0, 0, 0);
453   b.functionReturningClass();
454 
455   b.withTemplateParameter1(NS::ClassTemplate<int>());
456   b.withTemplateParameter2(NS::ClassTemplate<NS::Base *>());
457   b.functionReturingTemplate1();
458   b.functionReturingTemplate2();
459   b.functionTemplate1<int>(0);
460   b.functionTemplate1<NS::Base *>(0);
461   b.constFunction();
462   b.volatileFunction();
463   b.constVolatileFunction();
464   b.refQualifiedFunction();
465   NS::Base().refQualifiedFunction();
466 
467   NS::Derived d;
468   d.virtualFunction();
469 
470   NS::ClassTemplate<int> t1;
471   t1.classTemplateFunction();
472   NS::ClassTemplate<NS::Base *> t2;
473   t2.classTemplateFunction();
474 
475   NS::Constructor c1;
476   NS::Constructor c2(0);
477   NS::Constructor c3((NS::Base *)0);
478 
479   {
480     NS::Destructor destructor;
481   }
482 
483   NS::ContainerForAnonymousRecords anonymous;
484   anonymous.anonymousClass.anonymousClassFunction();
485   anonymous.anonymousStruct.anonymousStructFunction();
486   anonymous.anonymousUnion.anonymousUnionFunction();
487 
488   NS::localClass(0);
489 
490   NS::externFunction();
491 
492   // additional tests for __PRETTY_FUNCTION__
493 
494   functionTemplateWithTwoParams(0, 0.0f);
495   functionTemplateWithoutParameterList<double>();
496   functionTemplateWithTemplateReturnType<char>();
497   int array[] = { 1, 2, 3 };
498   functionTemplateWithCompoundTypes(array);
499   functionTemplateExplicitSpecialization(0);
500   functionTemplateExplicitSpecialization(0.0);
501   functionTemplateWithUnnamedTemplateParameter<int, float>(0.0f);
502 
503   OuterClass<int *>::MiddleClass::InnerClass<float> omi;
504   omi.memberFunction(0, 0.0f);
505 
506   ClassWithTemplateTemplateParam<char>::staticMember();
507 
508   NonTypeTemplateParam<42> ntt;
509   ntt.size();
510 
511   SpecializedClassTemplate<int> sct1;
512   sct1.memberFunctionTemplate(0, 0.0f);
513   SpecializedClassTemplate<char> sct2;
514   sct2.memberFunctionTemplate('0', 0.0);
515 
516   return 0;
517 }
518