/Zc:referenceBinding (принудительное применение правил привязки ссылок)

Если указан параметр /Zc:referenceBinding, компилятор не разрешает ссылку неконстантного lvalue привязывать к временному объекту.

Синтаксис

/Zc:referenceBinding[-]

Замечания

Если указан параметр /Zc:referenceBinding , компилятор следует разделу 8.5.3 стандарта C++11: это не позволяет выражениям, которые привязывают определяемый пользователем тип временным к неконстантной ссылке lvalue. По умолчанию или если указан параметр /Zc:referenceBinding, компилятор разрешает такие выражения как расширение Майкрософт, но выводится предупреждение уровня 4. Для безопасности кода, переносимости и соответствия рекомендуется использовать /Zc:referenceBinding.

Параметр /Zc:referenceBinding отключен по умолчанию. Параметр компилятора /permissive- неявно задает этот параметр, но его можно переопределить с помощью /Zc:referenceBinding-.

Пример

В этом примере показано расширение Майкрософт, позволяющее привязать временный тип, определенный пользователем, к ссылке, отличной от const lvalue.

// 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. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.

  3. Измените свойство "Дополнительные параметры", чтобы включить /Zc:referenceBinding и нажмите кнопку "ОК".

См. также

Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
/Zc (соответствие)