[Boost-bugs] [Boost C++ Libraries] #4175: [Proto] possible loss of expression wrappers in pass-through transforms

Subject: [Boost-bugs] [Boost C++ Libraries] #4175: [Proto] possible loss of expression wrappers in pass-through transforms
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2010-04-30 23:30:36


#4175: [Proto] possible loss of expression wrappers in pass-through transforms
---------------------------------------------------------+------------------
 Reporter: Robert Valkenburg <rj.valkenburg@…> | Owner: eric_niebler
     Type: Bugs | Status: new
Milestone: Boost 1.43.0 | Component: proto
  Version: Boost 1.42.0 | Severity: Problem
 Keywords: proto pass through transforms |
---------------------------------------------------------+------------------
 extended expressions seem to be getting unwrapped in proto pass through
 transforms.

 Others have not observed this effect so it may be a compiler/platform
 issue (or programmer of course)

 I've attached a smallish (~160 lines) file that only depends on
 "boost/proto/proto.hpp"


 The results are as follows (gcc 4.4.1 linux FC 11, x86_64 platform)


 g++ -Wall -I/home/users/robert/linux_x86_64/src/boost_1_42_0
 test_boost_proto.cpp -o test_boost_proto

 test_boost_proto.cpp: In function ‘void clifford::evaluate(Res&, const
 clifford::ga_expr<Expr>&) [with Res =
 clifford::multivector<clifford::cga3::rotator_basis,
 clifford::cga3::cga3>, Expr =
 boost::proto::exprns_::expr<clifford::tag::reverse_,
 boost::proto::argsns_::list1<clifford::ga_expr<boost::proto::exprns_::expr<boost::proto::tag::terminal,
 boost::proto::argsns_::term<const
 clifford::multivector<clifford::cga3::ebivector_basis,
 clifford::cga3::cga3>&>, 0l> > >, 1l>]’:

 test_boost_proto.cpp:126: instantiated from ‘clifford::multivector<B,
 A>& clifford::multivector<B, A>::operator=(const clifford::ga_expr<T>&)
 [with T = boost::proto::exprns_::expr<clifford::tag::reverse_,
 boost::proto::argsns_::list1<clifford::ga_expr<boost::proto::exprns_::expr<boost::proto::tag::terminal,
 boost::proto::argsns_::term<const
 clifford::multivector<clifford::cga3::ebivector_basis,
 clifford::cga3::cga3>&>, 0l> > >, 1l>, B = clifford::cga3::rotator_basis,
 A = clifford::cga3::cga3]’

 test_boost_proto.cpp:164: instantiated from here

 test_boost_proto.cpp:103: error: no matching function for call to
 â€˜evaluate_expr(clifford::multivector<clifford::cga3::rotator_basis,
 clifford::cga3::cga3>&,
 boost::proto::exprns_::expr<clifford::tag::reverse_,
 boost::proto::argsns_::list1<const
 clifford::ga_expr<boost::proto::exprns_::expr<boost::proto::tag::terminal,
 boost::proto::argsns_::term<const
 clifford::multivector<clifford::cga3::ebivector_basis,
 clifford::cga3::cga3>&>, 0l> >&>, 1l>)’

 The clifford::ga_expr<> got removed so it was unable to find
 evaluate_expr()

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/4175>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:03 UTC