/Zc:externConstexpr
(Включение переменных extern constexpr)
Параметр /Zc:externConstexpr
компилятора сообщает компилятору, что он соответствует стандарту C++ и разрешает внешнюю компоновку переменных constexpr
. По умолчанию Visual Studio всегда предоставляет переменную constexpr
внутреннюю компоновку, даже если указать ключевое extern
слово.
Синтаксис
/Zc:externConstexpr
[-
]
Замечания
Параметр /Zc:externConstexpr
компилятора приводит к применению внешней компоновки к переменным, объявленным с помощью extern constexpr
.
В более ранних версиях Visual Studio по умолчанию или при /Zc:externConstexpr-
указании Visual Studio применяет внутреннюю компоновку к constexpr
переменным, даже если extern
используется ключевое слово. Этот /Zc:externConstexpr
параметр доступен начиная с Visual Studio 2017 с обновлением 15.6. значение по умолчанию отключено.
По состоянию на Visual Studio 2022 с обновлением 17.6 параметр /permissive-
включает оба /Zc:externConstexpr
и /Zc:lambda
. В предыдущих версиях /permissive-
не включено ни одно.
Если файл заголовка содержит объявленную extern constexpr
переменную, ее необходимо пометить __declspec(selectany)
, чтобы объединить повторяющиеся объявления в один экземпляр в связанном двоичном файле. В противном случае могут отображаться ошибки компоновщика, например LNK2005, для нарушений правила одноопределенного определения.
Установка параметра компилятора в Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
Добавьте
/Zc:externConstexpr
или/Zc:externConstexpr-
в область "Дополнительные параметры".