не могли бы вы подробнее рассказать подробнее Особенно в чем причина, по которой это не разрешено.

struct A {}; 
struct B
{
  B (A* pA) {}
  B& operator = (A* pA) { return *this; }
};

template<typename T>
struct Wrap
{
  T *x; 
  operator T* () { return x; }
};

int main ()
{
  Wrap<A> a;
  B oB = a; // error: conversion from ‘Wrap<A>’ to non-scalar type ‘B’ requested
  oB = a;  // ok
}

oB построен тогда почемуB::B(A*) НЕ вызывается дляWrap<T>::operator T () ? [Запись:B::operator = (A*) вызывается дляWrap<T>::operator T () в следующем заявлении]

Ответы на вопрос(4)

Ваш ответ на вопрос