Hello List,
Given the following AST
ClassTemplateDecl 0x3fc1dd0 <.idbbuild/debug.c:13:1, line:20:1> line:13:43 T
-TemplateTypeParmDecl 0x3f220c8 <col:11, col:20> col:20 referenced
typename depth 0 index 0 P1
-TemplateTypeParmDecl 0x3f22168 <col:24, col:33> col:33 referenced
typename depth 0 index 1 P2
-CXXRecordDecl 0x3fc1d30 <col:37, line:20:1> line:13:43 class T definition
...
>-CXXMethodDecl 0x3fc2280 <line:15:2, col:15> col:5 Method 'P1 (P2)'
> `-ParmVarDecl 0x3fc2148 <col:13> col:15 'P2'
>-CXXRecordDecl 0x3fc2330 <line:16:2, line:19:2> line:16:2 struct
definition
...
> >-FieldDecl 0x3fc2468 <line:17:3, col:6> col:6 M1 'P1'
> `-FieldDecl 0x3fc24c8 <line:18:3, col:6> col:6 M2 'P2'
`-FieldDecl 0x3fc2590 <line:16:2, line:19:4> col:4 M 'struct
(anonymous struct at .idbbuild/debug.c:16:2)':'T::(anonymous struct at
.idbbuild/debug.c:16:2)'
`-ClassTemplateSpecializationDecl 0x3fc2640 <line:13:1, line:20:1>
line:13:43 class T definition
>-TemplateArgument type 'int'
>-TemplateArgument type 'char'
...
>-CXXMethodDecl 0x3fc2bb0 <line:15:2, col:15> col:5 Method 'int (char)'
> `-ParmVarDecl 0x3fc2aa8 <col:13> col:15 'char':'char'
>-CXXRecordDecl 0x3fc2c70 <line:16:2, line:19:2> line:16:2 struct
definition
...
> >-FieldDecl 0x3fc3e28 <line:17:3, col:6> col:6 referenced M1 'int':'int'
> >-FieldDecl 0x3fc3e88 <line:18:3, col:6> col:6 M2 'char':'char'
...
Is it possible to get the TemplateArgument (or even better the
TemplateTypeParmDecl) when visiting a FieldDecl or ParmVarDecl inside a
ClassTemplateSpecializationDecl.
FieldDecl * f; <-- FieldDecl 0x3fc3e28 in AST
Type * t = f->getType()->split().Ty;
And now for this Type t find the TemplateArgument or TemplateTypeParmDecl
Frank