/Zc: referenceBinding (参照のバインディング ルールの適用)
/Zc:referenceBinding オプションが指定されている場合、コンパイラでは非定数の lvalue 参照を一時にバインドすることが許可されません。
構文
/Zc:referenceBinding[-]
解説
/Zc:referenceBinding が指定されている場合、コンパイラは C++11 標準のセクション 8.5.3 に従います。これは、ユーザー定義型の一時を非定数の lvalue 参照にバインドする式を許可しません。 既定または /Zc:referenceBinding- が指定されている場合、コンパイラでは Microsoft の拡張機能としてこのような式を許可しますが、レベル 4 の警告が発行されます。 コード セキュリティ、移植性、準拠を考慮して、/Zc:referenceBinding を使用することをお勧めします。
/Zc:referenceBinding オプションは、既定ではオフになっています。 /permissive- コンパイラ オプションでこのオプションが暗黙的に設定されますが、/Zc:referenceBinding- を使用してオーバーライドできます。
例
このサンプルでは、非定数の lvalue 参照へのユーザー定義型の一時のバインドを許可する Microsoft 拡張機能を示します。
// zcreferencebinding.cpp
struct S {
};
void f(S&) {
}
S g() {
return S{};
}
int main() {
S& s = g(); // warning C4239 at /W4
const S& cs = g(); // okay, bound to const ref
f(g()); // Extension: error C2664 only if /Zc:referenceBinding
}
Visual C++ の準拠に関する問題について詳しくは、「 Nonstandard Behavior」をご覧ください。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
/Zc:referenceBinding が含まれるように [追加オプション] プロパティを変更し、[OK] を選択します。