Ответ 1
Microsoft публикует таблицу совместимости С++ 11, в которой constexpr
четко обозначена как недоступная в Visual Studio 2013.
Ноябрь 2013 CTP имеет это, однако.
Источник: Google visual studio constexpr
Этот код constexpr не скомпилирован в Visual Studio 2013 версии 12.0.21005.1 REL
Есть ли новый компилятор Visual Studio, который работает с constexpr?
#include <iostream>
constexpr int factorial(int n)
{
return n <= 1 ? 1 : (n * factorial(n - 1));
}
int main(void)
{
const int fact_three = factorial(3);
std::cout << fact_three << std::endl;
return 0;
}
вывод из компиляции:
1>------ Build started: Project: Project1, Configuration: Debug Win32 ------ 1> Source.cpp 1>....\source.cpp(3): error C2144: syntax error : 'int' should be preceded by ';' 1>....\source.cpp(3): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Херб Саттер упоминает Constexpr в своем блоге, но неясно, в какой версии он работает/будет работать? http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521
Microsoft публикует таблицу совместимости С++ 11, в которой constexpr
четко обозначена как недоступная в Visual Studio 2013.
Ноябрь 2013 CTP имеет это, однако.
Источник: Google visual studio constexpr
constexpr
не поддерживается в RTM Visual Studio 2013, см. таблицу совместимости . Это относится не только к версии RTM, но также и к обновлениям Visual Studio.
Если вы хотите придерживаться Visual Studio 2013, вы можете скачать Visual С++ Compiler ноябрь 2013 CTP, который поставляется с некоторыми новыми функциями, см. блог MSDN. К сожалению, Microsoft не имеет слияния с последними функциями Visual Studio Update и функциями CTP и четко заявляет, что они не планируют это делать.
Если мы хотим все это, нам нужно дождаться Visual Studio 2015, см. блог MSDN о просмотре VS 2015.
Как упоминается другими, Ноябрь 2013 г. Предварительный просмотр технологии клиентов (CTP) даст вам доступ к constexpr
*
Обратите внимание, что для загрузки нового компилятора вам потребуется изменить "Набор инструментов для платформы" на "Visual С++ Compiler Nov 2013 CTP (CTP_Nov2013)". Вы можете сделать это, открыв свой проект "Страницы свойств" и перейдя в "Свойства конфигурации" > "Общие", а затем изменив "Набор инструментов платформы".
* Существует некоторая противоречивая информация о том, в какой части constexpr
у вас действительно есть доступ, но это определенно не все определения стандартов constexpr
. Microsoft говорит здесь, что добавляет кэш 2013 года:
constexpr
поддержка (кроме конструкторов)
Microsoft говорит здесь, что она содержит:
constexpr
(кроме функций-членов)
Я даже не могу проверить, поддерживает ли он функции-член, потому что у него определенно нет поддержки для любого типа конструкции constexpr
. Например этот код дает эту ошибку с CTP в ноябре 2013 года:
ошибка C2127: незаконная инициализация объекта constexpr с не константным выражением
Еще одно примечание: во время написания Visual Studio 2015 Preview до сих пор не поддерживает конструкцию constexpr
. Держа пальцы в финальном выпуске.
Вам нужно установить обновление VS2013 5. (я был на Update 3, и он не работал) На момент написания этой статьи было неприемлемо то, что было сказано о "Новом 2013 CTP". Вы можете сделать это, перейдя сюда: https://my.visualstudio.com
и будет загружен, или: https://my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id=o~msft~vscom~older-downloads