我使用intel的icpc
(版本14.0.1,使用-std=c++11
)收到此错误消息,而clang(版本3.4)和gcc(版本4.8.1)都很高兴。典型的违规代码是:
#include <vector>
namespace test {
struct A
{
virtual bool foo(std::size_t) const = 0;
virtual ~A() = default;
};
struct B
: A
{
const std::vector<double> V;
const double X;
bool foo(std::size_t i) const { return V.at(i) > X; }
virtual bool bar(std::size_t i) const { return V.at(i) < X; }
B(double x, std::vector<double> const &v)
: V(v), X(x) {}
~B() = default;
};
}
由于test::A
是抽象的,因此最好有一个虚拟析构函数。然而,
关于
虚函数“test :: B ::〜B”的异常规范是 与重写函数“test :: A ::〜A”
的函数不兼容
我认为所有这些都是intel编译器的一些错误。正确的吗?
PS。在C ++ 11之前,我注意到了一个相关的question。当throw
被弃用(并被noexcept
替换)时,我真的很关心C ++ 11。