Fedora release 7 (Moonshine)
Linux idle.lbl.gov 184.108.40.206-91.fc7 #1 SMP Thu Sep 27 20:47:39 EDT 2007 x86_64
x86_64 x86_64 GNU/Linux
% g++ -v
Using built-in specs.
Configured with: /net/rosie/scratch2/rwgk/gcc_trunk/configure --prefix=/net/cci-filer1/vol1/tmp/rwgk/gcc_trunk_130411_x86_64_fc7 --enable-languages=c,c++,fortran --with-mpfr=/usr
Thread model: posix
gcc version 4.3.0 20071125 (experimental) (GCC)
I'll attach a small reproducer.
% g++ -c -fpermissive -I/usr/include/python2.5 used_but_not_defined.cpp
/usr/include/boost/type_traits/detail/cv_traits_impl.hpp:37: error: static data member 'boost::detail::cv_traits_imp<boost::reference_wrapper<boost::python::objects::<unnamed>::bind_return>*>::is_const' used, but not defined
Some data points:
svn revision 130341 didn't have this problem.
svn revision 130396 is broken already.
svn revision 130411 is still broken.
Created attachment 14636 [details]
I don't think this is valid code. There is no definition for the is_const part for the template where bind_return is in the anonymous namespace. The code was diagnose before that date but it was not rejected because GCC did not diagnose the issue before. We are diagnosing the invalid code now (which does not have to be diagnose according to the C++ standard).
Please read PR 34094 also.
Basically it comes down to (which is not rejected but should be but that is a different bug):
template <class a> struct c
static const bool t = 1;
Also please attach the preprocessed source.
Created attachment 14638 [details]
reproducer preprocessed gzip'ed
cc'ing David Abrahams since the original code is his.
The patch below makes the Boost.Python compilation work again with
gcc svn trunk revision 130411. This solves my problem. :-)
The g++ change could be tough for people who have to keep using older
boost versions for one reason or another. I think it would be best
to accept the old code if -fpermissive is given, at least on the
gcc 4.3 line.
--- function.cpp (revision 41350)
+++ function.cpp (working copy)
@@ -565,7 +565,11 @@
+/* Cannot be anonymous namespace:
@@ -610,7 +614,8 @@
function_call(PyObject *func, PyObject *args, PyObject *kw)
PyObject* result = 0;
- handle_exception(bind_return(result, static_cast<function*>(func), args, kw));
+ detail::bind_return(result, static_cast<function*>(func), args, kw));
*** This bug has been marked as a duplicate of 34238 ***