 <p>There is no work around.</p> <p>The C++ language places restrictions on some operators. Notably, the indexing (operator[]), assignment and function call operators must be defined as a non-static member function.</p> <p>This means that there can never be an implicit conversion on the "left-hand-side" operand in an expression of the type <code>lhs[rhs]</code>. End of story.</p> <p>All EDSL frameworks I know have helper functions to decorate your "literal" expression as a domain expression, e.g. <code>boost::phoenix::val(x)</code> or <code>boost::spirit::x3::as_parser(x)</code>.</p>