【发布时间】:2018-04-07 08:59:48
【问题描述】:
我已阅读《C++ Primer 5th ed》一书。在 Exception Specifications and Pointers、Virtuals 和 Copy Control 部分中,它说:
也就是说,如果我们声明一个具有非抛出异常规范的指针,我们可以只使用该指针指向类似限定的 职能。
而且我也参考noexcept specifier (since C++11),也有类似的:
指向非抛出函数的指针可隐式转换(C++17 起)可以分配(C++17 前)指向潜在抛出函数的指针,但反之则不行。
void ft(); // potentially-throwing
void (*fn)() noexcept = ft; // error
当我使用gcc version 5.4.0 20160609 编译示例 sn-p 时,没有错误或警告。
但是当我用Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x86 编译它时,它抱怨error C2440: 'initializing': cannot convert from 'void (__cdecl *)(void)' to 'void (__cdecl *)(void) noexcept'。这似乎是正确的行为。
所以我想知道gcc 编译器有什么问题吗?
【问题讨论】:
标签: c++ c++11 gcc visual-c++ noexcept