|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2004-10-05 09:40:43
Christoph Ludwig <cludwig_at_[hidden]> writes:
> Hi,
>
> I tried to become acquainted with Boost.Python. But even the examples
> in the documentation won't compile. The examples leave the impression
> as if they are untested because they contain quite obvious
> errors.
Some of them are untested. You can find assuredly tested examples in
libs/python/test/*.[cpp|py]
> For instance, from libs/python/doc/v2/operators.html (current CVS):
>
> [...]
> struct number
> : boost::integer_arithmetic<number>
> {
> number(long x_) : x(x_) {}
> operator long() const { return x; }
>
> number& operator+=(number const& rhs)
> { x += rhs }
> number& operator-=(number const& rhs);
> { x -= rhs }
> number& operator*=(number const& rhs)
> { x *= rhs }
> number& operator/=(number const& rhs);
> { x /= rhs }
> number& operator%=(number const& rhs);
> { x %= rhs }
>
> long x;
> };
> [...]
>
> There are spurious semicolons after the argument list of operators -=,
> /=, and %=. On the other hand, there are semicolons missing in the
> bodies of the in-place operators...
Thanks for the report; fixed in CVS.
> OK, it was no problem to fix this. But if run on the complete
> operators example, the compiler (gcc 3.4.2 on 686-pc-linux-gnu) chokes
> nevertheless. And this time I can't make much sense out of the error
> messages.
> (In case someone is interested, the compiler output is
> online at <URL:http://tinyurl.com/5u3rr>.)
error: ambiguous overload for 'operator+' in 'l + r'
note: candidates are: operator+(long int, long int) <built-in>
note: number boost::operator+(const number&, const number&)
GCC claims that the operator+ provided by integer_arithmetic<number>
is ambiguous with the one that uses an implicit conversion to int
on each side of the operator. That's a compiler bug; the former is
an exact match.
> The regression test table at
> <URL:http://boost.sourceforge.net/regression-logs/cs-Linux.html>
> shows a runtime failure of the operators test for gcc 3.4.2. So the
> corresponding C++ module could be compiled, in contrast to the
> example from the docs. The user-level report at the meta-comm site
> <URL:http://tinyurl.com/4ebxv> (last updated on Aug 11) shows that
> the operators test passed with gcc 3.4.1.
>
> Since the regression tests show some problems with gcc 3.4.2, I can't
> be completey sure whether the errors I see are due to a compiler /
> platform problem or to a erroneous example.
The errors you're seeing now are a compiler bug.
> Since the example contained errors that had nothing to do with
> Boost.Python and the compiler and since examples from the tutorial
> also failed I suspect the latter.
>
> Can someone explain how this particular example needs to be changed
> so it can be compiled?
The changes you mentioned (removing the incorrect semicolons and
adding them within the operator function bodies) ought to be enough.
> Will the examples in the docs be checked before the upcoming
> release?
Doubtful, unless someone volunteers.
-- Dave Abrahams Boost Consulting http://www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk