Тривиальный код C ++ проходит в тестовом проекте и не проходит в основном - PullRequest
1 голос
/ 13 февраля 2020

Эти две тривиальные строки кода:

const bool equal = (HUGE_VALF == HUGE_VALF);
static_assert(equal == true, "Fatal error");

в тестовой программе работают отлично (без предупреждений и ошибок).

Когда я копирую их в основной проект, я получаю эта ошибка в утверждении:

ошибка C2057: ожидаемое постоянное выражение

Здесь объект equal является константой со значением = true.

Эти строки кода в обоих случаях находятся внутри функций.

Два проекта имеют одинаковые настройки (C ++ 11, компилятор Visual C ++ 2013, IDE Visual C ++ 2019, / W4, без оптимизации).

Что может быть причиной такого отличного поведения от компилятора?

1 Ответ

0 голосов
/ 14 февраля 2020

Когда новая интегрированная среда разработки Visual Studio (например, VS 2019) загружает более старый проект в первый раз, она просит перенастроить проект. Если у вас установлена ​​старая Visual Studio, вы можете отклонить это действие. Затем компилятор из исходного VS будет использоваться более новой IDE.

После загрузки решения в обозревателе решений рядом с именем проекта у вас будет Visual Studio, которая будет использоваться для компиляции проекта. , Если парантез отсутствует, это означает, что используется компилятор и стандартная библиотека из текущей Visual Studio.

Как уже упоминалось в комментариях:

У меня нет скобок после проекта имя (если я ищу в нужном месте). Однако я понял проблему в путях включаемых файлов: Тестовый проект: 14.24.28314 \ include \ cmath; Основной проект: Microsoft Visual Studio 12.0 \ VC \ include \ cmath , то есть, гораздо более старая версия, которая все еще полагается на заголовок C math.h. Итак, один и тот же компилятор (VS2013), разные библиотеки ...

Это указывает на то, что вы, скорее всего, перенастроили проект или создали новый проект в VS 2019.

Чтобы создать Для проекта в VS 2019 используйте более старый компилятор. Вам нужно перейти в Свойства проекта -> Свойства конфигурации -> Общие -> Набор инструментов платформы и изменить его на соответствующую Visual Studio.

Также убедитесь, что все конфигурации (Debug, Release, ...) для всех типов компьютеров (32-разрядных, 64-разрядных) имеют этот параметр одинаковое значение.

Поскольку в тестовом проекте используется VS 2019 - в нем есть все необходимые определения - поэтому он работает.

Таким образом, проблема в том, что, скорее всего, стандартная библиотека VS 2013 не является C ++ 11 полной и НЕ имеет определения для HUGE_VALF. Но оно может содержать определение для HUGE_VAL

...