Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-01-07 18:08:37


This compiler bug was reported on the Python/C++-sig. Probably we
should stick a const_cast in addressof just for vc7?


attached mail follows:


Hi,

I stumbled upon a weird compilation error due to function 'addressof' in
MSVC7. Here is my test case :

************

class Test
{
public:

  struct Parameters
  {
  };

};

BOOST_PYTHON_MODULE( test )
{
  python::class_<Test::Parameters> Parameters_class("Parameters"); /*
this line causes the compile bug */
};

************

Here is what the compiler tells me :

************

d:\Sources\mgd\include\boost\utility\addressof.hpp(28) : error C2440:
'return' : cannot convert from 'const Test::Parameters *' to
'Test::Parameters *'

Conversion loses qualifiers

d:\Sources\mgd\include\boost\ref.hpp(40) : see reference to function
template instantiation 'Test::Parameters *boost::addressof(const T &)' being
compiled

with

[

T=Test::Parameters

]

d:\Sources\mgd\include\boost\ref.hpp(40) : while compiling class-template
member function 'boost::reference_wrapper<T>::reference_wrapper(const
Test::Parameters &)'

with

[

T=const Test::Parameters

]

d:\Sources\mgd\include\boost\python\object\make_instance.hpp(64) : see
reference to class template instantiation 'boost::reference_wrapper<T>'
being compiled

with

[

T=const Test::Parameters

]

d:\Sources\mgd\include\boost\python\object\class_wrapper.hpp(27) : see
reference to class template instantiation
'boost::python::objects::make_instance<T,Holder>' being compiled

with

[

T=Test::Parameters,

Holder=holder

]

d:\Sources\mgd\include\boost\python\object\class_wrapper.hpp(26) : while
compiling class-template member function 'PyObject
*boost::python::objects::class_cref_wrapper<Src,MakeInstance>::convert(const
Src &)'

with

[

Src=Test::Parameters,

MakeInstance=boost::python::objects::make_instance<Test::Parameters,holder>

]

d:\Sources\mgd\include\boost\python\class.hpp(88) : see reference to class
template instantiation
'boost::python::objects::class_cref_wrapper<Src,MakeInstance>' being
compiled

with

[

Src=Test::Parameters,

MakeInstance=boost::python::objects::make_instance<Test::Parameters,holder>

]

d:\Sources\mgd\include\boost\python\class.hpp(479) : see reference to
function template instantiation 'void
boost::python::detail::register_copy_constructor(const boost::mpl::bool_c<C>
&,const boost::python::objects::detail::select_value_holder<T,Held>
&,Test::Parameters *)' being compiled

with

[

C=true,

T=Test::Parameters,

Held=Test::Parameters

]

c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\xlocnum(80) :
while compiling class-template member function 'void
boost::python::class_<T,X1,X2,X3>::register_(void) const'

with

[

T=Test::Parameters,

X1=boost::python::detail::not_specified,

X2=boost::python::detail::not_specified,

X3=boost::python::detail::not_specified

]

c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\xmemory(136) :
while compiling class-template member function
'boost::python::class_<T,X1,X2,X3>::class_(const char *,const char *)'

with

[

T=Test::Parameters,

X1=boost::python::detail::not_specified,

X2=boost::python::detail::not_specified,

X3=boost::python::detail::not_specified

]

d:\Sources\mgd\Tests\Python\Python.cpp(232) : see reference to class
template instantiation 'boost::python::class_<T,X1,X2,X3>' being compiled

with

[

T=Test::Parameters,

X1=boost::python::detail::not_specified,

X2=boost::python::detail::not_specified,

X3=boost::python::detail::not_specified

]

************

What is quite weird is that I added a '#pragma message (__FUNCSIG__)' in
'addressof'
code ; and the faulty compiled function has the follwing signature:

    struct Test::Parameters *__cdecl boost::addressof(const struct
Test::Parameters &)

It seems to me that this signature should be :

    const struct Test::Parameters *__cdecl boost::addressof(const struct
Test::Parameters &)

It looks like a compiler bug to me. This only seems to happen for classes of
structs contained
in another class (or struct).

I'm no expert in compiler bug workaround so I could not find anything
interesting - but maybe
am I just missing something ?!

Any thoughts ?

Thanks,
Nicolas.

_______________________________________________
C++-sig mailing list
C++-sig_at_[hidden]
http://mail.python.org/mailman/listinfo/c++-sig


-- 
                       David Abrahams
   dave_at_[hidden] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk