Oops, I meant to mark the extra const with a color: char const * *const* greet() {
On Thu, Jul 5, 2012 at 7:57 AM, Ralf Grosse-Kunstleve <r...@google.com>wrote: > It looks like you inserted an extra const (I don't see it in the current > tutorial) ... > > char const * const greet() { > > It should work if you remove it. > > Ralf > > > On Thu, Jul 5, 2012 at 3:21 AM, Joel Uckelman <uckel...@nomic.net> wrote: > >> I'm trying to compile the example from the Boost Python docs without >> success. >> >> hello.cpp: >> >> #include <boost/python.hpp> >> >> char const * const greet() { >> return "hello, world"; >> } >> >> BOOST_PYTHON_MODULE(hello_ext) { >> using namespace boost::python; >> def("greet", greet); >> } >> >> I have Boost 1.48, Python 2.7, and gcc 4.7.0. >> >> When I do this: >> >> g++ -fPIC -I/usr/include/python2.7 -c -o hello.o hello.cpp >> >> I get the following errors: >> >> In file included from >> /usr/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:47:0, >> from /usr/include/boost/python/detail/invoke.hpp:63, >> from /usr/include/boost/python/detail/caller.hpp:16, >> from >> /usr/include/boost/python/object/function_handle.hpp:8, >> from >> /usr/include/boost/python/converter/arg_to_python.hpp:19, >> from /usr/include/boost/python/call.hpp:15, >> from /usr/include/boost/python/object_core.hpp:14, >> from /usr/include/boost/python/args.hpp:25, >> from /usr/include/boost/python.hpp:11, >> from hello.cpp:1: >> /usr/include/boost/python/detail/invoke.hpp: In instantiation of >> ‘PyObject* >> boost::python::detail::invoke(boost::python::detail::invoke_tag_<false, >> false>, const RC&, F&) [with RC = >> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const >> char* const>; F = const char* const (*)(); PyObject = _object]’: >> /usr/include/boost/python/detail/caller.hpp:223:13: required from >> ‘PyObject* boost::python::detail::caller_arity<0u>::impl<F, Policies, >> Sig>::operator()(PyObject*, PyObject*) [with F = const char* const (*)(); >> Policies = boost::python::default_call_policies; Sig = >> boost::mpl::vector1<const char* const>; PyObject = _object]’ >> /usr/include/boost/python/object/py_function.hpp:38:33: required from >> ‘PyObject* >> boost::python::objects::caller_py_function_impl<Caller>::operator()(PyObject*, >> PyObject*) [with Caller = boost::python::detail::caller<const char* const >> (*)(), boost::python::default_call_policies, boost::mpl::vector1<const >> char* const> >; PyObject = _object]’ >> hello.cpp:10:1: required from here >> /usr/include/boost/python/detail/invoke.hpp:75:19: error: no match for >> call to ‘(const >> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const >> char* const>) (const char*)’ >> In file included from >> /usr/include/boost/python/object/function_handle.hpp:8:0, >> from >> /usr/include/boost/python/converter/arg_to_python.hpp:19, >> from /usr/include/boost/python/call.hpp:15, >> from /usr/include/boost/python/object_core.hpp:14, >> from /usr/include/boost/python/args.hpp:25, >> from /usr/include/boost/python.hpp:11, >> from hello.cpp:1: >> /usr/include/boost/python/detail/caller.hpp: In instantiation of ‘static >> const PyTypeObject* >> boost::python::detail::converter_target_type<ResultConverter>::get_pytype() >> [with ResultConverter = >> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const >> char* const>; PyTypeObject = _typeobject]’: >> /usr/include/boost/python/detail/caller.hpp:242:13: required from >> ‘static boost::python::detail::py_func_sig_info >> boost::python::detail::caller_arity<0u>::impl<F, Policies, >> Sig>::signature() [with F = const char* const (*)(); Policies = >> boost::python::default_call_policies; Sig = boost::mpl::vector1<const char* >> const>]’ >> /usr/include/boost/python/object/py_function.hpp:48:35: required from >> ‘boost::python::detail::py_func_sig_info >> boost::python::objects::caller_py_function_impl<Caller>::signature() const >> [with Caller = boost::python::detail::caller<const char* const (*)(), >> boost::python::default_call_policies, boost::mpl::vector1<const char* >> const> >]’ >> hello.cpp:10:1: required from here >> /usr/include/boost/python/detail/caller.hpp:102:109: error: ‘struct >> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const >> char* const>’ has no member named ‘get_pytype’ >> In file included from >> /usr/include/boost/python/converter/pytype_function.hpp:10:0, >> from /usr/include/boost/python/to_python_indirect.hpp:16, >> from >> /usr/include/boost/python/converter/arg_to_python.hpp:10, >> from /usr/include/boost/python/call.hpp:15, >> from /usr/include/boost/python/object_core.hpp:14, >> from /usr/include/boost/python/args.hpp:25, >> from /usr/include/boost/python.hpp:11, >> from hello.cpp:1: >> /usr/include/boost/python/detail/unwind_type.hpp: In instantiation of >> ‘typename Generator::result_type >> boost::python::detail::unwind_type(boost::type<U>*, Generator*) [with >> Generator = boost::python::converter::detail::unwind_type_id_helper; U = >> const char* const; typename Generator::result_type = >> boost::python::type_info]’: >> /usr/include/boost/python/converter/pytype_function.hpp:45:74: required >> from ‘boost::python::type_info >> boost::python::converter::detail::unwind_type_id_(boost::type<T>*, >> mpl_::false_*) [with T = const char* const; mpl_::false_ = >> mpl_::bool_<false>]’ >> /usr/include/boost/python/converter/pytype_function.hpp:68:13: required >> from ‘static const PyTypeObject* >> boost::python::converter::expected_pytype_for_arg<T>::get_pytype() [with T >> = const char* const; PyTypeObject = _typeobject]’ >> /usr/include/boost/python/detail/signature.hpp:98:13: required from >> ‘static const boost::python::detail::signature_element* >> boost::python::detail::signature_arity<0u>::impl<Sig>::elements() [with Sig >> = boost::mpl::vector1<const char* const>]’ >> /usr/include/boost/python/detail/caller.hpp:232:78: required from >> ‘static boost::python::detail::py_func_sig_info >> boost::python::detail::caller_arity<0u>::impl<F, Policies, >> Sig>::signature() [with F = const char* const (*)(); Policies = >> boost::python::default_call_policies; Sig = boost::mpl::vector1<const char* >> const>]’ >> /usr/include/boost/python/object/py_function.hpp:48:35: required from >> ‘boost::python::detail::py_func_sig_info >> boost::python::objects::caller_py_function_impl<Caller>::signature() const >> [with Caller = boost::python::detail::caller<const char* const (*)(), >> boost::python::default_call_policies, boost::mpl::vector1<const char* >> const> >]’ >> hello.cpp:10:1: required from here >> /usr/include/boost/python/detail/unwind_type.hpp:165:72: error: no >> matching function for call to >> ‘boost::python::detail::unwind_helper2<1>::execute(const char* const (*)(), >> boost::python::converter::detail::unwind_type_id_helper*)’ >> /usr/include/boost/python/detail/unwind_type.hpp:165:72: note: candidate >> is: >> In file included from >> /usr/include/boost/python/converter/pytype_function.hpp:10:0, >> from /usr/include/boost/python/to_python_indirect.hpp:16, >> from >> /usr/include/boost/python/converter/arg_to_python.hpp:10, >> from /usr/include/boost/python/call.hpp:15, >> from /usr/include/boost/python/object_core.hpp:14, >> from /usr/include/boost/python/args.hpp:25, >> from /usr/include/boost/python.hpp:11, >> from hello.cpp:1: >> /usr/include/boost/python/detail/unwind_type.hpp:114:5: note: >> template<class Generator, class U> static typename Generator::result_type >> boost::python::detail::unwind_helper2<1>::execute(U* (*)(), Generator*) >> /usr/include/boost/python/detail/unwind_type.hpp:114:5: note: template >> argument deduction/substitution failed: >> In file included from >> /usr/include/boost/python/converter/pytype_function.hpp:10:0, >> from /usr/include/boost/python/to_python_indirect.hpp:16, >> from >> /usr/include/boost/python/converter/arg_to_python.hpp:10, >> from /usr/include/boost/python/call.hpp:15, >> from /usr/include/boost/python/object_core.hpp:14, >> from /usr/include/boost/python/args.hpp:25, >> from /usr/include/boost/python.hpp:11, >> from hello.cpp:1: >> /usr/include/boost/python/detail/unwind_type.hpp:165:72: note: types >> ‘U*’ and ‘const char* const’ have incompatible cv-qualifiers >> >> >> >> It looks like the salient error is this one: >> >> /usr/include/boost/python/detail/invoke.hpp:75:19: error: no match for >> call to ‘(const >> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const >> char* const>) (const char*)’ >> >> but the Boost Python tutorial didn't mention the need to specify a >> return value policy for the "hello world" example. >> >> So, I suppose this is either >> >> a) a bug in Boost Python, >> b) a bug in the Boost Python tutorial I copied from, or >> c) a mistake I'm making >> >> Does anyone see which? >> >> -- >> J. >> >> _______________________________________________ >> Cplusplus-sig mailing list >> Cplusplus-sig@python.org >> http://mail.python.org/mailman/listinfo/cplusplus-sig >> > >
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig