Я пытаюсь выяснить если
g++ -fsyntax-only
делает только проверку синтаксиса или если она разворачивает шаблоны также.
Таким образом я прошу у переполнения стека справку:
Существует ли способ записать программу так, чтобы синтаксически это было допустимо, но когда раскрытие шаблона сделано, ошибка происходит?
Спасибо!
Есть ли способ написать программу, которая синтаксически действительна, но при раскрытии шаблона возникает ошибка?
Зависит от вашего синтаксически корректным определением является g ++
-fsyntax-only
или нет.
Следующая простая тестовая программа иллюстрирует это и, как мне кажется, дает ответ на ваш вопрос:
// test.cpp
template< bool > struct test;
template< > struct test< true > { };
int main(void) {
test< false > t;
return 0;
}
Попытка построить:
$ g++ /tmp/sa.cpp
test.cpp: In function `int main()':
test.cpp:6: error: aggregate `test< false> t' has incomplete type and
cannot be defined
$ g++ -fsyntax-only /tmp/sa.cpp
test.cpp: In function `int main()':
test.cpp:6: error: aggregate `test< false> t' has incomplete type and
cannot be defined
Так что да, -fsyntax-only
выполняет расширение шаблона .