Сам парсер Eclipse не имеет представления о стандартном режиме C ++. Он распознает все функции C ++, которые были реализованы в его синтаксическом анализаторе (который на момент написания этой статьи представлял собой все функции C ++ 98 и C ++ 11, некоторые (но не все) функции C ++ 14 и несколько полезных функций). из C ++ 17 функций).
Однако стандартные заголовки библиотеки часто содержат разделы, которые зависят от макросов, обозначающих стандартную версию C ++ (например, #if __cplusplus >= 201103
- это обычная проверка для «C ++ 11 или новее»). Чтобы определить значение этих макросов, Eclipse вызывает компилятор, указанный в цепочке инструментов проекта, для обнаружения встроенных макросов. Обнаруженная ценность, например, макрос __cplusplus
будет зависеть от того, в каком стандартном режиме запускается компилятор для этого вызова.
Флаги для этого вызова компилятора указаны в свойствах проекта, как вы упомянули. Если вы не предоставите флаг там, компилятор будет использовать любой режим по умолчанию. Я считаю, что GCC использует -std=c++14
в качестве значения по умолчанию с GCC 6 и далее. (Хотя я не совсем знаю, что такое «GCC Cross Compiler 8.6.0». Согласно веб-сайту GCC , последняя версия - 8.1.)