<div dir="ltr">In the <a href="http://clang.llvm.org/docs/LanguageExtensions.html#controlling-overload-resolution">documentation for enable_if</a>, I have this paragraph: <div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<span style="color:rgb(51,51,51);font-family:'DejaVu Sans',Arial,Helvetica,sans-serif;font-size:14px;line-height:21.600000381469727px;text-align:justify">An enable_if expression will be evaluated by substituting the values of the parameters from the call site into the arguments in the expression and determining whether the result is true. If the result is false or could not be determined through constant expression evaluation, then this overload will not be chosen and the reason supplied in the string will be given to the user if their code does not compile as a result.</span></blockquote>

<div><br>The problem I have with this is that "evaluated by substituting" is ambiguous. You could observe a different result if the implementation performed template-instantiation style substitution, as opposed what we actually do which is pretending that the expression was inside a constexpr function being called with the parameters from the call-site.<br>

</div><div><br></div><div>I do mention that we perform constant expression evaluation, but it sounds like that happens after the substitution. Is there some more precise language I could use to clarify exactly how the extension behaves?</div>

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