c ++ 11 — наследование явного конструктора (Intel C ++)

Компилятор Intel C ++ (версия 16.0.3.207 Build 20160415), кажется, отбрасывает явный спецификатор, когда конструктор базового класса наследуется с помощью. Это ошибка?

struct B
{
explicit B(int) { }
};

struct D : B
{
using B::B;
};

B b = 1; // Not OK, fine
D d = 1; // Not OK with Microsoft C++ and GCC, but OK with Intel C++

10

Решение

Я считаю, что соответствующая формулировка из стандарта следующая (n4296, 12.9 Наследование конструкторов):

Характеристики конструктора конструктора или шаблона конструктора

(2.1) — список параметров шаблона (14.1), если есть,

(2.2) — список типов параметров (8.3.5), и

(2.3) — отсутствие или наличие явного (12.3.1).

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

Так что, скорее всего, это ошибка компилятора Intel C ++.

7

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

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

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