[cfe-dev] clang-cl -EHsc and extern C noexcept

Tiago Macarios via cfe-dev cfe-dev at lists.llvm.org
Sat Mar 31 15:54:28 PDT 2018


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?

$ cat f.cpp
#include <cstring>

template<typename Tch, int (__cdecl *pfnCompare)(const Tch* tz1, const Tch*
tz2) noexcept>
static int Compare_impl(const Tch* tz1, const Tch* tz2) noexcept
{
    return pfnCompare(tz1, tz2);
}

int Compare(const char* sz1, const char* sz2) noexcept
{
    return Compare_impl<char, strcmp>(sz1, sz2);
}


$ cl -EHsc -std:c++17 -c f.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.13.26129 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

f.cpp

$ clang-cl -EHsc -std:c++17 -c f.cpp
f.cpp(11,12):  error: no matching function for call to 'Compare_impl'
    return Compare_impl<char, strcmp>(sz1, sz2);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
f.cpp(4,12):  note: candidate template ignored: invalid
explicitly-specified argument for template parameter 'pfnCompare'
static int Compare_impl(const Tch* tz1, const Tch* tz2) noexcept
           ^
1 error generated.

If I remove the noexcept(s) in the files everything works fine.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180331/5998ad99/attachment.html>


More information about the cfe-dev mailing list