On Feb 26, 2011, at 4:55 AM, Eric Niebler wrote:
On 2/26/2011 8:18 AM, Nate Knight wrote:
int main()
{
la::state_type x = {1.0,2.0};
la::state_type const xc = x;
// this compiles
la::EvalOpt()( lit(x)[1] );
// this fails to compile
//la::EvalOpt()( lit(xc)[1] );
// this fails to compile
//_default()( la::Optimize()( boost::proto::lit(x)[1] ) );
// this compiles
_default()( as_expr( la::Optimize()( boost::proto::lit(x)[1] ) ) );
}
I think I know what's causing this. Can you try compiling with
BOOST_PROTO_STRICT_RESULT_OF?
Eric,
Thanks for the information. Compiling with BOOST_PROTO_STRICT_RESULT_OF
allows the first commented line to compile. I guess we'll wait to hear from
Joel about
the impact of this change on the run times of his library.
The second commented line does not compile. This seems to be because there are
no
'const Expr' overloads of boost::proto::transform::operator(). Is this
correct? The pertinent
part of the compiler error (from clang) is
boost/proto/transform/impl.hpp:96:9: note: candidate function
[with Expr =
boost::proto::exprns_::exprboost::proto::tag::subscript,
boost::proto::argsns_::list2const
boost::proto::utility::literalstd::tr1::arraydouble, 2 ,
boost::proto::domainns_::default_domain , const
boost::proto::exprns_::exprboost::proto::tag::terminal,
boost::proto::argsns_::termconst int , 0 , 2]
not viable: no known conversion from 'typename
boost::proto::detail::apply_transformtransform_type (const exprsubscript,
list2const literalarraydouble, 2
, default_domain , exprterminal, termconst int , 0 , 2
)::result_type' (aka
'boost::proto::exprns_::exprboost::proto::tag::subscript,
boost::proto::argsns_::list2const
boost::proto::utility::literalstd::tr1::arraydouble, 2 ,
boost::proto::domainns_::default_domain , const
boost::proto::exprns_::exprboost::proto::tag::terminal,
boost::proto::argsns_::termconst int , 0 , 2') to
'boost::proto::exprns_::exprboost::proto::tag::subscript,
boost::proto::argsns_::list2const
boost::proto::utility::literalstd::tr1::arraydouble, 2 ,
boost::proto::domainns_::default_domain , const
boost::proto::exprns_::exprboost::proto::tag::terminal,
boost::proto::argsns_::termconst int , 0 , 2
' for 1st argument
BOOST_PROTO_TRANSFORM_(PrimitiveTransform, X)
Nate
___
proto mailing list
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto