int pod = 5;
B<int> myB(pod); //OK
Это работает.B<int>
требует int&
для построения.Поскольку pod
является целым числом, его можно легко преобразовать в правильный тип.
A<int> myA;
B< A< A<int> > > myB2(myA); //COMPILE ERROR
Ну, это не может работать.Конструктор для B< A< A< int > > >
требует A< A< int > >
, а вы передаете ему A< int >
.Нет доступного преобразования, поэтому нет способа получить правильный тип для передачи конструктору.
Ваш компилятор должен был объяснить это вам.Мой сделал:
error: no matching function for call to B<A<A<int> > >::B(A<int>&)
note: candidates are:
note: B<T>::B(T&) [with T = A<A<int> >]
note: no known conversion for argument 1 from A<int> to A<A<int> >&
note: B<A<A<int> > >::B(const B<A<A<int> > >&)
note: no known conversion for argument 1 from A<int> to const B<A<A<int> > >&
Это раздача: no known conversion for argument 1 from A<int> to A<A<int> >&
.В последней строке сообщается, что компилятор также пытался использовать неявный конструктор копирования, но это тоже не удалось.