[C++-sig] Re: Slice tests failing on MSVC 7.1, 8.0

Jonathan Brandmeyer jbrandmeyer at earthlink.net
Fri Aug 27 01:27:31 CEST 2004


On Thu, 2004-08-26 at 10:12, David Abrahams wrote:
> Jonathan Brandmeyer <jbrandmeyer at earthlink.net> writes:
> 
> > According to the automated regression testers here:
> > http://www.meta-comm.com/engineering/boost-regression/developer/python_.html
> >
> > The slice test is failing on MSVC 7.1 and 8.0.  First off, do you expect
> > them to pass on these compilers?
> 
> They're your tests, aren't they??  Don't you expect them to pass?

Yes, of course I do.  I was hoping someone more familiar with MS's
toolchain might be aware of some quirk that would lead to the error I
listed below.

> > If so, the problem is that C++ functions that take a
> > boost::python::slice argument raise a Boost.Python.AgumentError when
> > called with a Python-created slice.
> >
> > The errors in the log take the form:
> > ArgumentError: Python argument types in
> >     slice_ext.check_slice_get_indicies(slice)
> > did not match C++ signature:
> >     check_slice_get_indicies(class boost::python::slice)
> >
> > Any ideas?
> 
> Did you register a converter that allows Python-created slices to be
> passed where boost::python::slice is required?

Not explicitly, and maybe not at all.  I expected the specialization of
object_manager_traits<> to make it Just Work.  It seems to be enough
with several other platforms and compilers.

At any rate, I managed to get the "Visual C++ Toolkit 2003" installed
and working on my system and committed a workaround.  It turns out that
the following test compiles and links fine with MSVC 7.1, but fails at
runtime when calling the exported function:

#include <boost/python.hpp>
using namespace boost::python;

void accept_slice_arg( const slice )
{
    return;
}

BOOST_PYTHON_MODULE(slice_test)
{
    def( "accept_slice_arg", &accept_slice_arg);
}

The workaround is to add a prototype that does not have the 'const'
qualifier in the function argument - just like with MSVC 7.0 and
earlier.

Is there a reasonable way to make code like the above work for user
programs?  As far as I can tell, all of the object manager classes are
affected.

Thanks,
-Jonathan




More information about the Cplusplus-sig mailing list