не могли бы вы подробнее рассказать подробнее Особенно в чем причина, по которой это не разрешено.
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 ()
в следующем заявлении]