为什么`explicit`与`virtual`不兼容?

xml*_*lmx 13 c++ virtual explicit function c++11

struct A
{
    // error C2216: 'explicit' cannot be used with 'virtual'
    virtual explicit operator bool() const 
    {
        return true;
    }
};

struct B : A
{
    // error C2216: 'explicit' cannot be used with 'override'
    explicit operator bool() const override 
    {
        return false;
    }
};

int main()
{
    if (A())
    {}

    if (B())
    {}
}
Run Code Online (Sandbox Code Playgroud)

我的编译器是VC++ 2013 RC.

为什么explicit不兼容virtual

理由是什么?

Luc*_*ore 18

看起来像一个错误,因为以下引用证明它们确实是兼容的,我找不到任何禁止它的东西.

12.3.2转换函数[class.conv.fct]

2)转换功能可以是explicit[
...]
5 ... 转换功能可以是virtual.

7.1.2函数说明符[dcl.fct.spec]

5)virtual说明符只能用于非静态类成员函数的初始声明; 见10.3.
6)explicit说明符只能用于其类定义中的构造函数或转换函数的声明; 见12.3.1和12.3.2.