none
構造化束縛が使えません RRS feed

  • 質問

  • VC++2019で、構造化束縛なるものを勉強しようと思っているのですが、コンパイルが通りません。

    std::pair<int, std::string> f()
    {
        return { 3, "Hello" };
    }
    
    
    int main() 
    {
        auto [id, message] = f();
    }

    コンパイルのオプション

    /JMC /permissive- /GS /W3 /Zc:wchar_t /ZI /Gm- /Od /sdl /Fd"x64\Debug\vc142.pdb" /Zc:inline /fp:precise /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /std:c++17 /FC /Fa"x64\Debug\" /EHsc /nologo /Fo"x64\Debug\" /Fp"x64\Debug\Project_const_reference.pch" /diagnostics:column 

    なにが問題なのかがわかりません。

    2020年11月9日 6:17

回答

  • あれ? コマンドラインを見る限りでは、「/std:c++17」フラグは既に付与されているように見えるのですけれどね。

    プロジェクトのプロパティを開き、[構成プロパティ]-[C/C++]-[言語] の [C++ 言語標準] が「ISO C++17 標準 (/std:c++17)」になっているかどうかを確認してみてください。

    また、画面上部の [構成] と [プラットフォーム] の組み合わせも確認しておいてください。

    たとえば Debug 構成だけが /std:c++17 になっていて、Release 構成が /std:c++14 になっていた場合には、単体ビルドでは正常でも、バッチビルド時にエラー検出されるかと思います。

    • 回答としてマーク Brillia 2020年11月10日 0:21
    2020年11月9日 9:34

すべての返信

  • 手元の環境ではコンパイルが通りました。
    そちらのコンパイルエラーの内容は何でしょうか?

    [構成オプション]-[C/C++]-[コマンド ライン]の内容を比較してみましたが、下記の
    プリコンパイル済みヘッダー ファイルの名前が異なっている以外は、完全に同一でした。

    /Fp"x64\Debug\Project_const_reference.pch"
    /Fp"x64\Debug\ConsoleApplication2.pch"

    2020年11月9日 7:35
  • オプションでは、std:c++17が設定されているのですが、

    コンパイルエラーの内容になります。

    エラー C2429 言語機能 '構造化バインディング' にはコンパイラ フラグ '/std:c++17' が必要です
    2020年11月9日 8:55
  • あれ? コマンドラインを見る限りでは、「/std:c++17」フラグは既に付与されているように見えるのですけれどね。

    プロジェクトのプロパティを開き、[構成プロパティ]-[C/C++]-[言語] の [C++ 言語標準] が「ISO C++17 標準 (/std:c++17)」になっているかどうかを確認してみてください。

    また、画面上部の [構成] と [プラットフォーム] の組み合わせも確認しておいてください。

    たとえば Debug 構成だけが /std:c++17 になっていて、Release 構成が /std:c++14 になっていた場合には、単体ビルドでは正常でも、バッチビルド時にエラー検出されるかと思います。

    • 回答としてマーク Brillia 2020年11月10日 0:21
    2020年11月9日 9:34
  • プラットフォーム(x64)とソリューションプラットフォーム(x86)が異なっていました。

    プラットフォームをwin32にしたところコンパイルが通りました。

    ありがとうございました。


    2020年11月10日 0:21