<div dir="ltr">That's interesting. When we consulted the documentation, I interpreted /EHc as applying "nounwind" to every function or "throw()". Those are different from noexcept in that they don't interact with the type system (as you've discovered) and they don't emit runtime checks that cause the program to exit if this assumption is violated.</div><br><div class="gmail_quote"><div dir="ltr">On Sat, Mar 31, 2018 at 3:54 PM Tiago Macarios via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>The code below compiles fine with cl, but fails with clang-cl. Do I need to add extra flags so that -EHsc treats extern C functions as noexcept? Or am I missing something?</div><div><br></div><div>$ cat f.cpp</div><div>#include <cstring></div><div><br></div><div>template<typename Tch, int (__cdecl *pfnCompare)(const Tch* tz1, const Tch* tz2) noexcept></div><div>static int Compare_impl(const Tch* tz1, const Tch* tz2) noexcept</div><div>{</div><div>    return pfnCompare(tz1, tz2);</div><div>}</div><div><br></div><div>int Compare(const char* sz1, const char* sz2) noexcept</div><div>{</div><div>    return Compare_impl<char, strcmp>(sz1, sz2);</div><div>}</div><div><br></div><div><br></div><div>$ cl -EHsc -std:c++17 -c f.cpp</div><div>Microsoft (R) C/C++ Optimizing Compiler Version 19.13.26129 for x64</div><div>Copyright (C) Microsoft Corporation.  All rights reserved.</div><div><br></div><div>f.cpp</div><div><br></div><div>$ clang-cl -EHsc -std:c++17 -c f.cpp</div><div>f.cpp(11,12):  error: no matching function for call to 'Compare_impl'</div><div>    return Compare_impl<char, strcmp>(sz1, sz2);</div><div>           ^~~~~~~~~~~~~~~~~~~~~~~~~~</div><div>f.cpp(4,12):  note: candidate template ignored: invalid explicitly-specified argument for template parameter 'pfnCompare'</div><div>static int Compare_impl(const Tch* tz1, const Tch* tz2) noexcept</div><div>           ^</div><div>1 error generated.</div><div><br></div><div>If I remove the noexcept(s) in the files everything works fine.</div><div><br></div></div>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>