[Dwarf-Discuss] Template parameter packs and template template parameters

Jason Merrill jason@redhat.com
Fri Aug 28 00:45:23 GMT 2009


...are two C++ features that are not currently represented in DWARF. 
We're adding them to G++ using the extensions described at

http://people.redhat.com/~dseketel/gcc/gcc-template-parameters-dwarf.txt

To restate:

For template template parameters, we're just using the source name of 
the template given as an argument so that the consumer can use its 
normal name resolution procedure: i.e. for

template <template <class> class T>
struct A
{
   int f() { T<int> t; return t.u; }
};

template <class U>
struct B
{
   U u;
};

int main()
{
   A<B> a;
   a.f();
}

within A<B>::f() we can ask the debugger what T<int> looks like, and it 
can think "well, T is a template template parameter, and the 
corresponding argument is "B", so I'll rewrite that as B<int>, which I 
know how to find".

A solution like this seems better to me than trying to describe unbound 
templates in DWARF.

-----

For template parameter packs, we're just dealing with them by describing 
them in DWARF as multiple template parameters, so for

template <class... Ts>
struct A
{
   void f() { ... }
};

we just pretend that instead of one parameter pack Ts, A has multiple 
parameters Ts#0, Ts#1, etc.

-----

Thoughts?

Jason




More information about the Dwarf-discuss mailing list