Подтвердить что ты не робот

Как скрыть параметры шаблона по умолчанию в сообщениях об ошибках gcc?

Чтение сообщений об ошибках, генерируемых g++, часто является болью, потому что gcc расширяет имена, например

std::ostream

в моем коде в гораздо более длинную форму, например

std::basic_ostream<char, std::char_traits<char> >

в сообщениях об ошибках. Аналогично, gcc расширяет std::string на std::basic_string<char>. Я не вижу никакой пользы для таких расширений, и это только мешает мне связывать сообщения об ошибках и сайт ошибки.

Мне было интересно, можно ли gcc отключить это поведение расширения и использовать более короткие имена с параметрами шаблона по умолчанию as-is?

Здесь есть связанный с этим вопрос , который, похоже, вообще не показывает длинное расширенное имя. Я спрашиваю здесь, можно ли просто показать короткое имя, как я использовал в коде. Ответ там также не решает проблему.

4b9b3361

Ответ 1

Нет флага компилятора для уменьшения или изменения сообщений об ошибках и связанных типов/шаблонов.

  • gcc поддержка цвета с gcc 4.9 с -fdiagnostics-color={auto, always, never}. См. Документацию здесь.

Существует несколько сторонних инструментов, которые помогут вам расшифровать сообщения об ошибках:

  • GCCFilter для раскраски и упрощения сообщений об ошибках (Perl script)
  • ColorGCC в том же духе (Perl script), git .
  • STLFilt: фильтр сообщений, предназначенный для диагностики, связанной с STL. Обратите внимание, что он больше не поддерживается и не развивается.

Также как (очень хорошая) альтернатива, компилятор clang очень, очень хорош в диагностике и сообщениях об ошибках.

Ответ 2

Я сомневаюсь, что вы можете прямо сейчас. Вариантом закрытия является fno-pretty-templates, который действует следующим образом:

-fno-довольно-шаблоны
Когда сообщение об ошибке относится к специализации шаблона функции, компилятор обычно печатает подпись шаблон, за которым следуют аргументы шаблона и любые typedefs или typenames в сигнатуре (например, void f (T) [с T = int], а не void f (int)), чтобы он очистил какой шаблон. Когда сообщение об ошибке относится к специализации шаблона класса, компилятор исключает любые аргументы шаблона, соответствующие шаблону по умолчанию аргументы для этого шаблона. Если это одно из этих действий сложнее понять сообщение об ошибке, а не проще, вы можете использовать -fno-pretty-templates, чтобы отключить их.