Boost C++ Libraries: Ticket #4175: [Proto] possible loss of expression wrappers in pass-through transforms https://svn.boost.org/trac10/ticket/4175 <p> extended expressions seem to be getting unwrapped in proto pass through transforms. </p> <p> Others have not observed this effect so it may be a compiler/platform issue (or programmer of course) </p> <p> I've attached a smallish (~160 lines) file that only depends on "boost/proto/proto.hpp" </p> <p> The results are as follows (gcc 4.4.1 linux FC 11, x86_64 platform) </p> <p> g++ -Wall -I/home/users/robert/linux_x86_64/src/boost_1_42_0 test_boost_proto.cpp -o test_boost_proto </p> <p> test_boost_proto.cpp: In function ‘void clifford::evaluate(Res&amp;, const clifford::ga_expr&lt;Expr&gt;&amp;) [with Res = clifford::multivector&lt;clifford::cga3::rotator_basis, clifford::cga3::cga3&gt;, Expr = boost::proto::exprns_::expr&lt;clifford::tag::reverse_, boost::proto::argsns_::list1&lt;clifford::ga_expr&lt;boost::proto::exprns_::expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;const clifford::multivector&lt;clifford::cga3::ebivector_basis, clifford::cga3::cga3&gt;&amp;&gt;, 0l&gt; &gt; &gt;, 1l&gt;]’: </p> <p> test_boost_proto.cpp:126: instantiated from ‘clifford::multivector&lt;B, A&gt;&amp; clifford::multivector&lt;B, A&gt;::operator=(const clifford::ga_expr&lt;T&gt;&amp;) [with T = boost::proto::exprns_::expr&lt;clifford::tag::reverse_, boost::proto::argsns_::list1&lt;clifford::ga_expr&lt;boost::proto::exprns_::expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;const clifford::multivector&lt;clifford::cga3::ebivector_basis, clifford::cga3::cga3&gt;&amp;&gt;, 0l&gt; &gt; &gt;, 1l&gt;, B = clifford::cga3::rotator_basis, A = clifford::cga3::cga3]’ </p> <p> test_boost_proto.cpp:164: instantiated from here </p> <p> test_boost_proto.cpp:103: error: no matching function for call to ‘evaluate_expr(clifford::multivector&lt;clifford::cga3::rotator_basis, clifford::cga3::cga3&gt;&amp;, boost::proto::exprns_::expr&lt;clifford::tag::reverse_, boost::proto::argsns_::list1&lt;const clifford::ga_expr&lt;boost::proto::exprns_::expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;const clifford::multivector&lt;clifford::cga3::ebivector_basis, clifford::cga3::cga3&gt;&amp;&gt;, 0l&gt; &gt;&amp;&gt;, 1l&gt;)’ </p> <p> The clifford::ga_expr&lt;&gt; got removed so it was unable to find evaluate_expr() </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/4175 Trac 1.4.3 Robert Valkenburg <rj.valkenburg@…> Fri, 30 Apr 2010 23:32:08 GMT attachment set https://svn.boost.org/trac10/ticket/4175 https://svn.boost.org/trac10/ticket/4175 <ul> <li><strong>attachment</strong> → <span class="trac-field-new">test_boost_proto.cpp</span> </li> </ul> <p> self contained program which shows expression unwrapping </p> Ticket Eric Niebler Wed, 05 May 2010 00:19:26 GMT status changed; resolution set https://svn.boost.org/trac10/ticket/4175#comment:1 https://svn.boost.org/trac10/ticket/4175#comment:1 <ul> <li><strong>status</strong> <span class="trac-field-old">new</span> → <span class="trac-field-new">closed</span> </li> <li><strong>resolution</strong> → <span class="trac-field-new">fixed</span> </li> </ul> <p> (In <a class="changeset" href="https://svn.boost.org/trac10/changeset/61782" title="pass_through transform doesn't strip expression wrappers, fixes #4175">[61782]</a>) pass_through transform doesn't strip expression wrappers, fixes <a class="closed ticket" href="https://svn.boost.org/trac10/ticket/4175" title="#4175: Bugs: [Proto] possible loss of expression wrappers in pass-through transforms (closed: fixed)">#4175</a> </p> Ticket