<div dir="ltr"><div>Try using initialization list syntax.  That way the parser won't think you are declaring a function.</div><div><br></div><div><span style="font-family:Calibri,sans-serif;font-size:12.8px">OELock lock{mutex};</span><br></div><div><span style="font-family:Calibri,sans-serif;font-size:12.8px"><br></span></div><div><span style="font-family:Calibri,sans-serif;font-size:12.8px"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 29, 2016 at 12:02 PM, Brian Cole via cfe-users <span dir="ltr"><<a href="mailto:cfe-users@lists.llvm.org" target="_blank">cfe-users@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word">
<div>
<div>
<div style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">
Since switching over to clang C++11 on OS X, we had this weird C++ oddity surface while writing some new code. The problem is that ‘mutex’ is no longer a variable, it is a class type that can be interpreted as a function argument. That is, the following line
 of code can be interpreted as a function declaration now:</div>
<div style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">
<br>
</div>
<div style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">
OELock lock(mutex);</div>
<div style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">
<br>
</div>
<div style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">
Instead of a scoped lock acquisition as has been convention for some time now. The full code to recreate the subtle bug is as follows: </div>
<div style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">
<br>
</div>
<div>
<div><font face="Calibri,sans-serif">#include <mutex></font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">using namespace std;</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">struct OEMutex</font></div>
<div><font face="Calibri,sans-serif">{</font></div>
<div><font face="Calibri,sans-serif">  void Acquire() {}</font></div>
<div><font face="Calibri,sans-serif">  void Release() {}</font></div>
<div><font face="Calibri,sans-serif">};</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">static OEMutex _mutex;</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">class OELock</font></div>
<div><font face="Calibri,sans-serif">{</font></div>
<div><font face="Calibri,sans-serif">  OEMutex &_mutex;</font></div>
<div><font face="Calibri,sans-serif">  OELock();</font></div>
<div><font face="Calibri,sans-serif">  OELock(const OELock&);</font></div>
<div><font face="Calibri,sans-serif">  OELock& operator=(const OELock&);</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">public:</font></div>
<div><font face="Calibri,sans-serif">  OELock(OEMutex &mutex) : _mutex(mutex) { _mutex.Acquire(); }</font></div>
<div><font face="Calibri,sans-serif">  ~OELock() { _mutex.Release(); }</font></div>
<div><font face="Calibri,sans-serif">};</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">int main()</font></div>
<div><font face="Calibri,sans-serif">{</font></div>
<div><font face="Calibri,sans-serif">  OELock lock(mutex);</font></div>
<div><font face="Calibri,sans-serif">}</font></div>
</div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div>Ideally, we would like the compilation to fail and tell the user the ‘mutex’ variable can not be found. Any clever C++ trick to do that? We’ve tried declaring the move constructors of OELock to be private, but it still compiles (maybe that’s SFINAE?). </div>
<div><br>
</div>
<div>Thanks,</div>
<div>Brian</div>
<div style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">
<br>
</div>
<div style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">
<div></div>
</div>
</div>
</div>
</div>

<br>_______________________________________________<br>
cfe-users mailing list<br>
<a href="mailto:cfe-users@lists.llvm.org">cfe-users@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users</a><br>
<br></blockquote></div><br></div>