В каком порядке использовался параметр шаблона? - PullRequest
0 голосов
/ 22 октября 2018

Рассмотрим следующие два (похожих) символа: _Z3fooIicEvT_iT0_ и _Z3fooIicEvT0_iT_.

c++filt дает следующий вывод:

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

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

Это не говорит нам, в какомЧтобы параметры шаблона использовались в качестве параметров функции.

Однако обратите внимание, что символы заканчиваются по-разному (T_iT0_ против T0_iT_), где:

  • T_ =1-й параметр шаблона
  • T0_ = 2-й параметр шаблона

Таким образом, на самом деле имеется информация для печати более общего объявления шаблона.

ДляНапример, в следующем формате:
template<typename T_, typename T0_> void foo(T_, int, T0_);
или
template<typename T_, typename T0_> void foo(T0_, int, T_);

Есть ли простой способ получить эту информацию?

(И нет, яне хочу реализовывать парсер, который может интерпретировать полную спецификацию IA64 C ++ ABI)

...