衰减到指针和noexcept规范的Lambda

时间:2018-08-27 15:58:25

标签: c++ lambda visual-studio-2017 function-pointers noexcept

考虑以下代码:

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的错误?

0 个答案:

没有答案