type, F&gt; expression_type;
        typedef expression_type result_type;
    };

    // (t * v) [i] = t * v [i]
    template&lt;class T1, class E2&gt;
    typename vector_binary_scalar1_traits&lt;T1, E2, scalar_multiplies&lt;T1, typename E2::value_type&gt; &gt;::result_type
    operator * (const T1 &amp;e1,
                const vector_expression&lt;E2&gt; &amp;e2);

    template&lt;class E1, class T2, class F&gt;
    struct vector_binary_scalar2_traits {
        typedef vector_binary_scalar2&lt;typename E