views:

139

answers:

1

Trying to build the following simple example

#include <boost/python.hpp>

using namespace boost::python;
tuple head_and_tail(object sequence)
{
    return make_tuple(sequence[0],sequence[-1]);
}

available here, I end up with this compilation error under Visual Studio 9

error C2668: 'boost::python::make_tuple' : ambiguous call to overloaded function
1>        C:\Program Files\boost_1_42_0\boost/python/detail/make_tuple.hpp(22): could be 'boost::python::tuple boost::python::make_tuple<boost::python::api::object_item,boost::python::api::object_item>(const A0 &,const A1 &)'
1>        with
1>        [
1>            A0=boost::python::api::object_item,
1>            A1=boost::python::api::object_item
1>        ]
1>        C:\Program Files\boost_1_42_0\boost/tuple/detail/tuple_basic.hpp(802): or       'boost::tuples::tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9> boost::tuples::make_tuple<boost::python::api::object_item,boost::python::api::object_item>(const T0 &,const T1 &)' [found using argument-dependent lookup]
1>        with
1>        [
1>            T0=boost::python::api::proxy<boost::python::api::item_policies>,
1>            T1=boost::python::api::proxy<boost::python::api::item_policies>,
1>            T2=boost::tuples::null_type,
1>            T3=boost::tuples::null_type,
1>            T4=boost::tuples::null_type,
1>            T5=boost::tuples::null_type,
1>            T6=boost::tuples::null_type,
1>            T7=boost::tuples::null_type,
1>            T8=boost::tuples::null_type,
1>            T9=boost::tuples::null_type
1>        ]

Is this a bug in boost::python, or am I doing something wrong? How can I get the above program to compile?

A: 

Using the full namespace, fixes the problem:

#include <boost/python.hpp>

using namespace boost::python;
tuple head_and_tail(object sequence)
{
    return boost::python::make_tuple(sequence[0],sequence[-1]);
}
celil