Как определить, что компилятор делает с метапрограммой?(для boost.proto) - PullRequest
4 голосов
/ 30 июня 2011

Как определить, что мой компилятор (g ++) делает с кодом шаблона?

Я использую boost.proto (библиотека шаблонов выражений) для оценки некоторых математических выражений во время компиляции. Код оценивает выражения правильно, но я хотел бы посмотреть, расширил ли компилятор выражение до эквивалента рукописного c-кода (т.е. исключил все временные значения), или есть еще какие-то дальнейшие оптимизации во время компиляции должно быть сделано.

Есть ли способ узнать, что компилятор сделал с шаблонами?

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Существует несколько способов увидеть код C ++ после прохода создания шаблона:

  • Используйте gcc -fdump-tree-original (или даже -fdump-tree-all, чтобы увидеть больше проходов)
  • Используйте ElsaАнализатор C ++: http://scottmcpeak.com/elkhound/sources/elsa/
  • Используйте Clang и бэкэнд C LLVM - последний даст наиболее нечитаемый код, но в некоторых случаях он все еще полезен.В самом Clang должна быть некоторая функциональность дампа AST.
2 голосов
/ 30 июня 2011
g++ -S

задокументировано как «Только компиляция; не собирать и не связывать».В основном вы получаете вывод сборки.

...