質問: 以下のstd::vecotr<>型でpush_back(); emplace_back()メンバで末尾に要素を足しているのですが提示コードの下の提案と思われるnote と警告文の意味がわかりません。つまりどうしろということなのでしょうか?また普通に実行できています。 ``` #include "stdio.h" #include int main() { std::vector idx; // std::vector> idx; // idx.push_back(2); idx.emplace_back(2); // printf("%zu\n",idx.size()); return 0; } ``` C:\Users\yw325\Desktop\test>cl *.cpp Microsoft(R) C/C++ Optimizing Compiler Version 19.26.28806 for x64 Copyright (C) Microsoft Corporation. All rights reserved. main.cpp C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include\vector(748): warning C4530: C++ 例外処 理を使っていますが、アンワインド セマンティクスは有効にはなりません。/EHsc を指定してください。 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include\vector(708): note: コンパイル対象の関数 テンプレート インスタンス化 'int *std::vector>::_Emplace_reallocate<_Ty>(int *const ,_Ty &&)' のリファレンスを 確認してください with [ _Ty=int ] C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include\vector(708): note: コンパイル対象の関数 テンプレート インスタンス化 'int *std::vector>::_Emplace_reallocate<_Ty>(int *const ,_Ty &&)' のリファレンスを 確認してください with [ _Ty=int ] main.cpp(9): note: コンパイル対象の関数 テンプレート インスタンス化 'void std::vector>::emplace_back(int &&)' のリファレンスを確認してください Microsoft (R) Incremental Linker Version 14.26.28806.0 Copyright (C) Microsoft Corporation. All rights reserved. /out:main.exe main.obj C:\Users\yw325\Desktop\test>main.exe C:\Users\yw325\Desktop\test>
回答: ``` warning C4530: C++ 例外処 理を使っていますが、アンワインド セマンティクスは有効にはなりません。/EHsc を指定してください。 ``` エラーメッセージのとおりです。Visual C++で、C++の例外を使う際には、コンパイルオプションに`/EHsc`の指定が必要です。 (指定しないと、例外が発生した場合にデストラクタが呼ばれない、などの不具合となります)