<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 26 May 2015 at 13:20, Ettore Speziale <span dir="ltr"><<a href="mailto:speziale.ettore@gmail.com" target="_blank">speziale.ettore@gmail.com</a>></span> wrote:<br><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">Hello,<br>
<br>
the attached patch fixes the case where __attribute__((enable_if)) is sticked to a member function with no overloads. It seems that in these case clang does not execute the code about overload resolution which contains the check about __attribute__((enable_if)). Hence it would be possible to use a function protected by __attribute__((enable_if)) even if the __attribute__((enable_if)) predicate is false.<br></blockquote><div><br></div><div>Good catch!</div><div><br></div><div>I think this will cause the enable_if expression to be evaluated multiple times if the expression is not dependent but appertains to a function template, such as:</div><div><br></div><div>  template <typename T> void foo(int i, T t) __attribute__((enable_if(i==0, ""))) {}</div><div><br></div><div>I'm not sure how to fix that without hoisting it up to ActOnCallExpr? Could you check whether this is a real problem?</div><div><br></div><div>Nick</div></div></div></div>