Hi Masa,
The problem is that you were not really building a proto expression, but just calling your DifferenceOperator directly. You can create a proper proto terminal in your domain using:
ExprWrapper<boost::proto::terminal<DifferenceOperator>::type> const opr = {{}};
Once that is done, only the deep copy compiles, but you need a proper grammar for evaluation to work, and a << overload for printing and starting evaluation. The fixed code with a small start of the grammar is attached.
p.s. It's awfully quiet on this list, is it still the place to discuss Proto?