g ++ -fsyntax-only unit test - PullRequest
       1

g ++ -fsyntax-only unit test

9 голосов
/ 14 апреля 2010

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

g++ -fsyntax-only

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

Таким образом, я прошу переполнение стека за помощью:

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

Спасибо!

1 Ответ

11 голосов
/ 14 апреля 2010

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

Зависит от того, является ли ваше определение синтаксически действительным 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 выполняет расширение шаблона .

...