
On 07/03/11 14:16, Eric Niebler wrote:
It remains to be seen what, if anything, can be done to make expression templates and "auto" play nicely in C++0x. But I suspect the answer is: nothing.
Again, the question is what people expect auto to do in this case.
Joel, I'm honored by your enthusiasm for Proto, but in this case, I think it's misplaced. For a simple value type like an infinite precision integer, expression templates are just plain dangerous.
I actually disagree. For me it depends of the underlying representation. If the integer rep itself is static and dont incur any allocation, then yeah, let's play with ref-count or NRVO all along. I still think that for a dynamic sized large int, it is basically a subset of the "ET for matrix" problem. And even for static sized large integer, what about pattern matching for local optimization ? Then again, I can be the one dealing bollocks atm.
I could imagine a design that uses a) the small object optimization for ints below a certain threshold, and b) a ref-counted handle/body idiom for everything else (like xpressive's regex objects), where the body could be either i) a simple big-int terminal or ii) a type-erased expression template that keeps its referenced bodies alive until an evaluation is needed, and so avoid unnecessary allocations for intermediate expressions.
I agree but in this case, you still use "expression template" in a type erased context.
It must be done such that adding two big-ints yields a big-int. "auto i = x + y;" simply MUST work, always, though it need not actually do any addition.
Yeah, i wonder if the expression template stuff using recursive variant in the old vault can't be what we need. It is basically that: ET with Type Erasure that keep everything proper.