[iterator] unrelated type problem with iterator_facade arrow operator

Can someone confirm if the attached code doesn't compile intentionally
or if this is a bug? I'm sorry for not posting a minimal example but
I couldn't figure out how to reduce the problem. It requires Windows
(uses ATL::CAdapt and ATL::CComBSTR) and I've tested using VS 2005 and
VS2008. This bug manifests when the Reference type has overloaded the
address-of operator to return a type not implicitly convertible to
Value * (I believe).
Changing lines 324-326 in iterator_facade.hpp from:
static type make(Reference x)
{
return implicit_cast<type>(&x);
}
to:
static type make(Reference x)
{
return implicit_cast<type>(boost::addressof(x));
}
and adding the appropriate include makes the attached code compile.
Full error log below:
1>c:\dev\vendor\boost\1.37.0\boost\iterator\iterator_facade.hpp(326) :
error C2664: 'boost::implicit_cast' : cannot convert parameter 1 from
'BSTR *' to 'ATL::CComBSTR *'
1> Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast
1> c:\dev\vendor\boost\1.37.0\boost\iterator\iterator_facade.hpp(325)
: while compiling class template member function 'ATL::CComBSTR
*boost::detail::operator_arrow_result

Michael Fawcett
Can someone confirm if the attached code doesn't compile intentionally or if this is a bug? I'm sorry for not posting a minimal example but I couldn't figure out how to reduce the problem.
Ping with complete code this time. Hopefully that will help with a response. I
also added my work-around to the code.
#include
participants (1)
-
Michael Fawcett