/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
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
Измените свойство "Дополнительные параметры", чтобы включить /Zc:referenceBinding и нажмите кнопку "ОК".
См. также
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
/Zc (соответствие)