<div dir="ltr">Hi clang experts,<div><br></div><div>I'm not a compiler whiz, and I've never worked with Clang before.  I'm attempting to hack Clang.  I'm having trouble building an Expr that does what I want.  I'm looking for guidance.</div>

<div><br></div><div>Here's the background.  I'm working on a prototype of a potential C++ trait that Richard Smith suggested to me.  It's a nullary trait that returns true if it's evaluated in a context that requires constant evaluation.  It returns false in all other contexts.  I want it to work like this:</div>

<div><br></div><div><div>  constexpr bool value1 = __is_constant_evaluation(void);</div><div>  static_assert(value1 == true, "Expected constant evaluation");</div><div><br></div><div>  bool value2 = __is_constant_evaluation(void);</div>

</div><div>  assert(value2 == false);</div><div><br clear="all"><div>I'm just making a prototype.  The bogus (void) gives me a way to leverage the infrastructure around UnaryTypeTrait.  The (void) is ignored.</div><div>

<br></div><div>So, I'm at the point where I need to make an Expr to return from the Parser.  I've derived a type from Expr, modeling after the UnaryTypeTraitExpr class.  But I can't figure out how to configure the Expr so that the Expr gets re-evaluated every time it is evaluated, rather than remembering the first result.</div>

<div><br></div><div>It seems to me that the Expr needs to be re-evaluated each time because from one context to the next it will have a different result.  That is, the result of __is_constant_evaluation(void) is a consequence of where its result goes (e.g., value1 or value2), it's not a consequence of any passed parameter.</div>

<div><br></div><div>Any guidance is appreciated.  I'd prefer suggestions for how to write the code.  But I'll also listen to advice suggesting that what I'm attempting is too hard for a novice.  Or a suggestion that I'm taking the wrong tack altogether would be great if you want to point me in a different direction.<br>

</div><div><br></div><div>Thanks for reading.</div><br>Scott Schurr<br><a href="mailto:S.Scott.Schurr@gmail.com" target="_blank">S.Scott.Schurr@gmail.com</a>
</div><div><br></div><div>p.s. This is only the first of two problems that look hard.  The second hard problem (that I know of) will be getting the constexpr-ness of the context to the Expr when it evaluates so it can return true under the right circumstances.  But I'm trying to solve just one problem at a time.</div>

<div><br></div></div>