Я просто экспериментирую со ссылками, используя этот код:
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, я просто получаю предупреждение
warning C4512: 'B': assignment не удалось сгенерировать оператор
Я понимаю, почему получаю это предупреждение. Но не должен ли компилятор генерировать ошибку и для оператора B b1 = b;
? Это похоже на то, что он сгенерировал конструктор копирования, но не сгенерировал оператор присваивания. Разве эти двое не связаны друг с другом по сути? имеет ли смысл сгенерировать реализацию по умолчанию только для одного из них, когда другой не может быть сгенерирован?