Я просто экспериментирую с ссылками, используя этот код:
class A
{
};
class B
{
public:
B(A& a): m_a(a){}
A& m_a;
};
int main()
{
A a;
B b(a);
B b1 = b;
}
Я ожидал, что оба B b1 = b;
выдадут ошибку. Вместо этого, когда я компилирую VS2008, я просто получаю предупреждение
предупреждение C4512: 'B': присвоение оператор не может быть сгенерирован
Я понимаю, почему я получаю это предупреждение. Но не должен ли компилятор генерировать ошибку для оператора B b1 = b;
тоже? Это похоже на сгенерированный конструктор копий, но не генерирует оператор присваивания. Разве эти два не связаны друг с другом? имеет ли смысл генерировать реализацию по умолчанию только для одного из них, когда другой не может быть сгенерирован?