Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2007-04-17 19:25:46


Maurizio Vitale wrote:
> Since I have problems with using grammars in my examples, I started
> from the lazy_vector example and see if I could incrementally change
> it to match my situation.
>
> As it is, the code doesn't compile for me. I had to make two changes,
> one trivial and one that I'd like to check with Eric.

That shows what I get when I only test with one compiler. It works fine
with MSVC-8.0. :-(

> The trivial one is:
> template<typename Expr>
> result_type operator()( Expr const & expr, lazy_subscript_context & ctx ) const
> changed to:
> template<typename E>
> result_type operator()( E const & expr, lazy_subscript_context & ctx ) const
> in order not to shadow the outher Expr. This is an error in gcc, might
> be a warning with other compilers.

Actually, the better fix to to remove "template<typename Expr>" --
operator() doesn't need to be a template.

> The one I'd like to know about is this:
> template< typename T >
> struct lazy_vector
> : lazy_vector_expr< typename proto::terminal< std::vector<T> >::type >
> {
> typedef typename proto::terminal< std::vector<T> >::type expr_type;
>
> lazy_vector( std::size_t size = 0, T const & value = T() )
> : lazy_vector_expr( expr_type::make( std::vector<T>( size, value ) ) )
------------------^^^^^^^^^^^^^^^^

Whoops, that needs to be lazy_vector_expr<expr_type>.

>
> Even with these changes, the following line:
> v1 += v2 - v3;
> gives a ambiguity for the overload of operator +=.

That may be a gcc bug, I'll need to check. But regardless, it only
reinforces the point of the example that you need to disable proto's
operator+=. The rest of the example shows you how.

> Eric, if you have a complete lazy_vector example that does compile, it
> would be helpful to put it in the test or example directory, so that
> people can avoid problems with extracting code from the documentation.

Done. I've also patched up the docs.

-- 
Eric Niebler
Boost Consulting
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