Добрый день.
struct A{A()=default;A(A&)=default;};
template<typename B>struct C:B{C()=default;C(const C&)=default;};
C<A> d;
int main(){}
G++ 4.4 кушал, 4.7 — не хочет.
На какой пункт стандарта смотреть? Можно ли отключить такое поведение?
Спасибо
Здравствуйте, Аноним, Вы писали:
А>А>struct A{A()=default;A(A&)=default;};
А>template<typename B>struct C:B{C()=default;C(const C&)=default;};
А>C<A> d;
А>int main(){}
А>
Да тут и без пунктов стандарта ясно что это не может компилироваться. Не может компилятор преобразовать const C& в неконстантную A&. Тебе действительно нужно, чтобы конструктор копирования в классе A принимал неконстантную ссылку, или это по недосмотру?
Здравствуйте, Аноним, Вы писали:
А>А>struct A{A()=default;A(A&)=default;};
А>template<typename B>struct C:B{C()=default;C(const C&)=default;};
А>C<A> d;
А>int main(){}
А>
rg45 уже ответил. если у родителя конструктор вида
A(A&), то у потомка по умолчанию создается конструктор какого же типа (12.8.8).