<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>