модульный тест только для G++ -fsyntax

Я пытаюсь выяснить, если

g++ -fsyntax-only

выполняет только проверку синтаксиса или если он также расширяет шаблоны.

таким образом, я прошу Stack overflow о помощи:

есть ли способ написать программу так, чтобы синтаксически она действительна, но когда расширение шаблона сделано, возникает ошибка?

спасибо!

1 ответов


есть ли способ написать программу так, чтобы синтаксически она действительна, но когда расширение шаблона сделано, возникает ошибка?

зависит от того, является ли ваше определение синтаксически валидный is g++ ' s -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 тут выполнить расширение шаблона.