Note that there are some explanatory texts on larger screens.

plurals
  1. POUsage of `boost::phoenix::static_cast_` mixed with standard library
    text
    copied!<p><strong>It is a Phoenix v3 bug. It compiles with Phoenix v2 just fine. I did bug report. I will mark this question as resolved in 2 days. Thank you all.</strong></p> <p>I am trying to make a short lamba with phoenix, but I get bunch of compile errors. Here is the code.</p> <pre><code>std::vector&lt;unsigned char&gt; data; using boost::phoenix::arg_names::_1; using boost::phoenix::static_cast_; std::ostringstream oss; oss &lt;&lt; std::hex; //Doesn't compile std::for_each(data.begin(),data.end(), oss &lt;&lt; static_cast_&lt;unsigned int&gt;(_1) ); //Compiles std::for_each(data.begin(),data.end(), oss &lt;&lt; _1 ); </code></pre> <p>Now I get the following compile error from GCC 4.6.1: <code>/usr/include/boost/utility/result_of.hpp:-1: In instantiation of ‘boost::detail::result_of_nested_result&lt;boost::phoenix::static_cast_eval, boost::phoenix::static_cast_eval(boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::detail::target&lt;unsigned char&gt; &gt;, 0l&gt;&amp;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::argument&lt;1&gt; &gt;, 0l&gt; &gt;&amp;, boost::phoenix::vector2&lt;boost::phoenix::vector2&lt;const boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::shift_left, boost::proto::argsns_::list2&lt;boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;std::basic_ostringstream&lt;char&gt;&amp;&gt;, 0l&gt; &gt;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::phoenix::tag::static_cast_, boost::proto::argsns_::list2&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::detail::target&lt;unsigned char&gt; &gt;, 0l&gt;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::argument&lt;1&gt; &gt;, 0l&gt; &gt; &gt;, 2l&gt; &gt; &gt;, 2l&gt; &gt;*, unsigned char&amp;&gt;&amp;, const boost::phoenix::default_actions&amp;&gt;)&gt;’:</code></p> <p><code>/usr/include/boost/phoenix/object/static_cast.hpp:29: error: declaration of ‘struct boost::phoenix::static_cast_eval::result&lt;boost::phoenix::static_cast_eval(boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::detail::target&lt;unsigned char&gt; &gt;, 0l&gt;&amp;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::argument&lt;1&gt; &gt;, 0l&gt; &gt;&amp;, boost::phoenix::vector2&lt;boost::phoenix::vector2&lt;const boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::shift_left, boost::proto::argsns_::list2&lt;boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;std::basic_ostringstream&lt;char&gt;&amp;&gt;, 0l&gt; &gt;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::phoenix::tag::static_cast_, boost::proto::argsns_::list2&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::detail::target&lt;unsigned char&gt; &gt;, 0l&gt;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::argument&lt;1&gt; &gt;, 0l&gt; &gt; &gt;, 2l&gt; &gt; &gt;, 2l&gt; &gt;*, unsigned char&amp;&gt;&amp;, const boost::phoenix::default_actions&amp;&gt;)&gt;’</code></p> <p><code>/usr/include/boost/phoenix/core/detail/preprocessed/call_10.hpp:65: error: no type named ‘type’ in ‘struct boost::result_of&lt;boost::phoenix::static_cast_eval(boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::detail::target&lt;unsigned char&gt; &gt;, 0l&gt;&amp;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::argument&lt;1&gt; &gt;, 0l&gt; &gt;&amp;, boost::phoenix::vector2&lt;boost::phoenix::vector2&lt;const boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::shift_left, boost::proto::argsns_::list2&lt;boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;std::basic_ostringstream&lt;char&gt;&amp;&gt;, 0l&gt; &gt;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::phoenix::tag::static_cast_, boost::proto::argsns_::list2&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::detail::target&lt;unsigned char&gt; &gt;, 0l&gt;, boost::phoenix::actor&lt;boost::proto::exprns_::basic_expr&lt;boost::proto::tag::terminal, boost::proto::argsns_::term&lt;boost::phoenix::argument&lt;1&gt; &gt;, 0l&gt; &gt; &gt;, 2l&gt; &gt; &gt;, 2l&gt; &gt;*, unsigned char&amp;&gt;&amp;, const boost::phoenix::default_actions&amp;&gt;)&gt;’</code></p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload