
OK. Last question. I changed my make_expr to use domain_of and it worked nice for the base case. Then I changed the domain of the exponent thingy. exponent takes a float/double vec adn return an integral vec of the same size. So I gave to simd_expr<tag::exponent_> the same domain as vec<integer>. Now I can build things like : exponent(vf) + vi with the proper type and everything works. Now, I had some strange behavior in my calalble_context. When I debug it, it seems that the type of exponent(vf) is simd_expr< vec<float,4>, domain< simd_info<int,4> > > instead of some : simd_expr< bp::terminal<vec<float,4> >, domain< simd_info<int,4> > > So I don't how how to catch it in my context operator() overload. For info, my exponent function is something like : template<class A0> static inline typename proto::result_of::make_expr< tag::exponent_ , domain< make_integrer_vec<A0>::info_type > , A0 const&> exponent( A0 const a0) { return proto::make_expr< tag::exponent_ , domain< make_integrer_vec<A0>::info_type > >( boost::cref(a0)); }