AaronBallman wrote: > Hey Richard - We added idempotency to define_aggregate in response to concern > from Clang maintainers that it could interact poorly with clang-repl. The > argument was that idempotency would provide a better experience for a user > that wanted to re-evaluate an expression that was previously submitted for > evaluation. I think, for define_aggregate, it's a reasonable choice (but no, > this is not a case of P2996 authors trying to work around our own model - the > original behavior was indeed non-idempotent).
I think I was the maintainer who mentioned that. :-) I think we want consteval function calls to be idempotent because it means we can memoize calls for improved performance and it matches existing implementation/mental models of what constant evaluation means. Certainly that helps with things like clang-repl too, but clang-repl isn't standards conforming anyway so I don't think it should push the design of the standards feature too much. I think there's no way we can make consteval function calls themselves idempotent once C++ has reflection with side effects because that introduces observable effects outside of the value computations. Same inputs can lead to different outputs. So whether define_aggregate itself is idempotent is kind of moot. What we want is for `consteval` functions to produce the same outputs when given the same inputs, but I believe there's no reasonable way to accomplish that. So I think we can make it non-idempotent without really losing anything more. https://github.com/llvm/llvm-project/pull/115168 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits