Оператор присваивания и конструктор копирования при наличии ссылок

Я просто экспериментирую со ссылками, используя этот код:

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; ? Это похоже на то, что он сгенерировал конструктор копирования, но не сгенерировал оператор присваивания. Разве эти двое не связаны друг с другом по сути? имеет ли смысл сгенерировать реализацию по умолчанию только для одного из них, когда другой не может быть сгенерирован?

10
задан Asha 25 May 2011 в 06:08
поделиться