On Mon, Dec 10, 2007 at 07:34:27PM -0700, Martin Michlmayr wrote:
boost also breaks other packages.  Brian, do you think you could take
a look? (Although I suspect this might have been fixed upstream
already as SUSE probably ran into it as well.)

Absolutely. There are several unrelated problems here, and I'll go through them all.

gcc -pthread -fno-strict-aliasing -DNDEBUG -Wall -O3 -fPIC 
-I/usr/include/taglib -I/usr/include/python2.4 -c src/wrapper/basics.cpp -o 
build/temp.linux-x86_64-2.4/src/wrapper/basics.o

Generally, it's a bad idea to compile C++ code with gcc; this probably means that linking is also done with gcc (instead of g++) which can lead to subtle brokenness.

In file included from /usr/include/boost/python/class.hpp:29,
                 from /usr/include/boost/python.hpp:18,
                 from src/wrapper/common.hpp:1,
                 from src/wrapper/basics.cpp:11:
/usr/include/boost/python/detail/def_helper.hpp:192: error: declaration of 'typename 
boost::python::detail::keyword_extract<boost::tuples::tuple<const T1&, const T2&, const T3&, const 
T4&, boost::python::default_call_policies, boost::python::detail::keywords<0ul>, const char*, void 
(boost::python::detail::not_specified::*)(), boost::tuples::null_type, boost::tuples::null_type> >::result_type 
boost::python::detail::def_helper<T1, T2, T3, T4>::keywords() const'
/usr/include/boost/python/args_fwd.hpp:35: error: changes meaning of 'keywords' from 
'struct boost::python::detail::keywords<0ul>'

Within a scope, each name can have only one meaning. The latter header declares a function named keywords, but before that point the name refers to struct boost::python::detail::keywords<0ul>, but after it refers to the function. Hence, before that point, invoking keywords() would create a new instance of an object, whereas afterward, it would invoke the function. Changing the meaning of the name like that is not allowed.

This looks like a difficult problem, but the general solution is to either rename the function or move the declaration of the function to someplace where the other name isn't in scope. The latter doesn't seem possible here, so the former looks like the only option. I'd suggest talking to upstream and seeing what they're doing about this.

/usr/include/boost/type_traits/is_convertible.hpp:128: error: static data member 
'boost::detail::is_convertible_basic_impl<<unnamed>::TagWrap*&, 
<unnamed>::TagWrap*>::_m_from' used, but not defined

static data members must be explicitly defined, not just declared. In this case, _m_from is declared, but no explicit initialization has occurred. The solution is to actually define the static data member.

The remainder of the errors are just instances of this last one.

--
brian m. carlson / brian with sandals: Houston, Texas, US
+1 713 440 7475 | http://crustytoothpaste.ath.cx/~bmc | My opinion only
a typesetting engine: http://crustytoothpaste.ath.cx/~bmc/code/thwack
OpenPGP: RSA v4 4096b 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187

Attachment: signature.asc
Description: Digital signature

Reply via email to