eval_impl<T, Context> will keep the reference if it's a l-value reference, that is, T is a reference type.