/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 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。

  3. /Zc:referenceBinding が含まれるように [追加オプション] プロパティを変更し、[OK] を選択します。

関連項目

MSVC コンパイラ オプション
MSVC コンパイラ コマンド ラインの構文
/Zc (準拠)