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

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

g++ -fsyntax-only

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

Таким образом я прошу у переполнения стека справку:

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

Спасибо!

9
задан vladr 14 April 2010 в 05:11
поделиться

1 ответ

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

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

11
ответ дан 4 December 2019 в 20:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: