Предупреждение компилятора (уровень 1) C4350

изменение поведения: "член 1" был вызван вместо "член 2"

Значение rvalue не может быть привязано к неконстантной ссылке. В версиях Visual C++ до Visual Studio 2003 можно было привязать rvalue к неконстантной ссылке в прямой инициализации. Этот код теперь выдает предупреждение.

Для обратной совместимости по-прежнему можно привязать rvalue к неконстантным ссылкам, но стандартные преобразования предпочтительнее по возможности.

Это предупреждение представляет собой изменение поведения компилятора Visual C++ .NET 2002. Если этот параметр включен, это предупреждение может быть предоставлено для правильного кода. Например, его можно получить при использовании шаблона класса std::auto_ptr .

Если вы получите это предупреждение, изучите код, чтобы узнать, зависит ли он от значений rvalue для неконстантных ссылок. Добавление констант в ссылку или предоставление дополнительной перегрузки const-reference может решить проблему.

Это предупреждение отключено по умолчанию. Дополнительные сведения см. в разделе Compiler Warnings That Are Off by Default.

Следующий пример приводит к возникновению ошибки C4350:

// C4350.cpp
// compile with: /W1
#pragma warning (default : 4350)
class A {};

class B
{
public:
   B(B&){}
   // try the following instead:
   // B(const B&){}

   B(A){}
   operator A(){ return A();}
};

B source() { return A(); }

int main()
{
   B ap(source());   // C4350
}