[cfe-dev] Template class: initialization list and overloaded functions
Yin Qiu
qiuyin at gmail.com
Tue Sep 25 10:06:38 PDT 2012
Hi,
I noticed some discrepancy when I used libclang to parse a template class definition and a plain non-template one.
Here's the code I fed clang:
1 struct A
2 {
3 A(int);
4 };
5
6 struct Bar
7 {
8 Bar(int);
9
10 void go();
11 void go(int);
12 };
13
14 template <class T>
15 struct Foo : public Bar
16 {
17 Foo()
18 : Bar(3), a(0)
19 {}
20
21 void baz()
22 {
23 go();
24 }
25
26 A a;
27 };
28
29 struct Oof : public Bar
30 {
31 Oof()
32 : Bar(3), a(0)
33 {}
34
35 void baz()
36 {
37 go();
38 }
39
40 A a;
41 };
Classes Foo and Oof essentially have the same piece of code except that the former is a class template. clang_visitChildren() shows some differences when parsing the two.
Line 18 vs. Line 32:
clang reported two UnexposedExpr's at line 18 for those two expressions in the initialization list; whereas it reports two CallExpr's (ctor invocations) at line 32. Can we expose those CallExpr's in the initialization list of a class template as well?
Line 23 vs. Line 37:
For both classes, a CallExpr and a MemberRefExpr are reported. But for Foo<T>, there is an additional OverloadedDeclRef. Although Bar::go() has two overloads, isn't the function resolved already when we say go() (with void argument) in Foo<T>::baz()?
Did I miss something? Please advise. Thanks!
More information about the cfe-dev
mailing list