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())
{}
}
Мой компилятор — VC ++ 2013 RC.
Почему explicit
не совместим с virtual
?
Каково обоснование?
Выглядит как ошибка, так как следующие цитаты доказывают, что они действительно совместимы, и я не смог найти ничего, чтобы это запретить.
2) Функция преобразования может быть
explicit
[…]
[…]
5) Функции преобразования могут бытьvirtual
,
а также
5)
virtual
спецификатор должен использоваться только в начальном объявлении нестатической функции-члена класса;
см. 10.3.
6)explicit
спецификатор должен использоваться только в объявлении конструктора или функции преобразования в
его определение класса; см. 12.3.1 и 12.3.2.
Других решений пока нет …