Неявное инстанцирование шаблонных функций по-умолчанию
От: Аноним  
Дата: 20.12.13 20:11
Оценка:
Добрый день.

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 — не хочет.
На какой пункт стандарта смотреть? Можно ли отключить такое поведение?

Спасибо
Re: Неявное инстанцирование шаблонных функций по-умолчанию
От: rg45 СССР  
Дата: 20.12.13 20:38
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>
А>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 принимал неконстантную ссылку, или это по недосмотру?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re: Неявное инстанцирование шаблонных функций по-умолчанию
От: night beast СССР  
Дата: 21.12.13 05:29
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>
А>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).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.