web-dev-qa-db-ja.com

constexprはVC2013でコンパイルされていません

このconstexprコードは、Visual Studio 2013バージョン12.0.21005.1 RELでコンパイルされません。

Constexprで動作する新しいVisual Studioコンパイラはありますか?

#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> ------ビルド開始:プロジェクト:Project1、構成:デバッグWin32 ------ 
 1> Source.cpp 
 1> ....\source.cpp (3):エラーC2144:構文エラー: 'int'の前に ';' 
 1> ....\source.cpp(3):エラーC4430:型指定子がない-intが想定されています。注:C++はdefault-int 
をサポートしません===========ビルド:0成功、1失敗、0最新、0スキップ========= =

Herb Sutterは彼のブログでconstexprについて言及していますが、どのバージョンで機能するか、または機能するかは不明です。 http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521

44
Damian

Microsoftは、C++ 11互換性テーブルを公開しています。このテーブルでは、constexprVisual Studio 2013で利用不可として明確にマークされています です。

2013年11月のCTP にはありますが。

出典:Google visual studio constexpr

constexprはVisual Studio 2013 RTMではサポートされていません。 互換性テーブル を参照してください。これはRTMバージョンだけでなく、Visual Studioの更新にも当てはまります。

Visual Studio 2013に固執したい場合は、 Visual C++ Compiler 2013年11月CTP をダウンロードできます。これにはいくつかの新機能が付属しています。 MSDNブログ を参照してください。残念ながら、Microsoftは最新のVisual Studio Update機能およびCTP機能との合併を行っておらず、明確にそうする予定はないと述べています。

すべてが必要な場合は、Visual Studio 2015を待つ必要があります。 VS 2015 Previewに関するMSDNブログ を参照してください。

9
Werner Henze

他の人が述べているように、 2013年11月カスタマーテクノロジープレビュー(CTP)constexpr *へのアクセスを提供します

ダウンロードするだけで、新しいコンパイラを使用するには、「プラットフォームツールセット」を「Visual C++コンパイラ2013年11月CTP(CTP_Nov2013)」に変更する必要があります。これを行うには、プロジェクトの「プロパティページ」を開き、「構成プロパティ」>「一般」に進み、「プラットフォームツールセット」を変更します。

* constexprのどの部分に実際にアクセスできるかについては矛盾する情報が少しありますが、constexprの標準定義のすべてではありません。マイクロソフトによると こちら 2013年11月のCTPには次のように追加されています:

constexprサポート(コンストラクターを除く)

Microsoftは here に以下を含むと言っています:

constexpr(メンバー関数を除く)

メンバー関数をサポートしているかどうかをテストすることさえできません。これは、どのタイプのconstexpr構造もサポートしていないためです。たとえば、 このコード は2013年11月のCTPでこのエラーを返します。

エラーC2127:非定数式を使用した 'constexpr'エンティティの不正な初期化

補足説明:Visual Studio 2015 Previewの執筆時点では、constexpr構築はまだサポートされていません。最終リリースで指を交差させておく。

4
Jonathan Mee

VS2013 Update 5をインストールする必要があります(Update 3を使用していて、機能していませんでした)。この記事の執筆時点では、「Nov 2013 CTP」は適用できませんでした。ここに行くことでそれを行うことができます: https://my.visualstudio.com

ダウンロードするか、または https://my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id=o~msft~vscom~older-downloads

0
Abei Villafane