In which order was the template parameter used?

Viewed 61

Consider the following two (similar) symbols: _Z3fooIicEvT_iT0_ and _Z3fooIicEvT0_iT_.

c++filt gives the following output:

> c++filt _Z3fooIicEvT_iT0_
void foo<int, char>(int, int, char)

> c++filt _Z3fooIicEvT0_iT_
void foo<int, char>(char, int, int)

This does not tell us in which order the template parameter were used as function parameters.

Notice, however, that the symbols end differently (T_iT0_ vs T0_iT_), where:

  • T_ = 1st template parameter
  • T0_ = 2nd template parameter

So there actually is information available to also print the more generic template declaration.

For example, on the following format:
template<typename T_, typename T0_> void foo(T_, int, T0_);
or
template<typename T_, typename T0_> void foo(T0_, int, T_);

Is there a simple way to retrieve this information?

(And no, I don't want to implement a parser that can interpret the full IA64 C++ ABI specification)

0 Answers
Related