考虑以下代码:
int main() {
void(*ptr)() noexcept = []() noexcept {
// ...
};
}
它可以用gcc / clang编译,但是不能用msvc编译。
错误非常模糊:
错误C2440:“正在初始化”:无法从“ main ::”转换为“ void(__cdecl *)(void)noexcept”
注意:没有可用的用户定义的转换运算符可以执行此转换,否则无法调用该运算符
如果我按照以下说明删除noexcept
,一切都会很好:
int main() {
void(*ptr)() = []() noexcept {
// ...
};
}
据我所知,代码是正确的,msvc以及gcc和clang都应接受。代码段中有问题吗?还是msvc的错误?