Другой формат ошибки формата в GCC? - PullRequest
0 голосов
/ 23 августа 2010

GCC имеет очень подробный формат для некоторых сообщений об ошибках шаблона:

... some_class<A,B,C> [with int A = 1, int B = 2, int C = 3]

Любой шанс заставить его показать что-то вроде:

... some_class<1,2,3>

Ответы [ 3 ]

3 голосов
/ 23 августа 2010

Вы потеряете трек от того, из какого шаблона происходит специализация:

template<int A, int B> class X {
  void f();
};

template<int A> class X<A, 2> {
  void f();
};

int main() {
  X<1, 2>().f();
  X<2, 1>().f();
}

GCC выводит

m.cpp: In function 'int main()':
m.cpp:6:12: error: 'void X<A, 2>::f() [with int A = 1]' is private
m.cpp:10:19: error: within this context
m.cpp:2:12: error: 'void X<A, B>::f() [with int A = 2, int B = 1]' is private
m.cpp:11:19: error: within this context

Если бы просто сказали X<1, 2> и X<2, 1>, вы бы потеряливажная информация, содержащаяся в этой диагностике.

1 голос
/ 16 марта 2011

Используйте опцию -fno-pretty-templates. Это делает то, что вы хотите, а также пропускает аргументы шаблона по умолчанию.

1 голос
/ 23 августа 2010

Нет, если вы не хотите поддерживать частную ветку источника GCC.

Хотя это разумно для шаблонов классов, шаблоны функций могут перегружаться друг против друга и иметь разные списки аргументов шаблона для одной и той же функции. Тогда последний тип ошибки будет неоднозначным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...