Por que o construtor não é chamado para um determinado operador de fundiçã
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
}
QuandooB
é construído então porqueB::B(A*)
NÃO é chamado paraWrap<T>::operator T ()
? [Nota:B::operator = (A*)
é chamado paraWrap<T>::operator T ()
na próxima declaração]