Почему `явный` не совместим с` виртуальным`?

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?

Каково обоснование?

13

Решение

Выглядит как ошибка, так как следующие цитаты доказывают, что они действительно совместимы, и я не смог найти ничего, чтобы это запретить.

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.

18

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector