C++ видимость унаследованного конструктора

Когда я использую using вот так, почему конструктор наследуется публично?

class Base {
int x;
public:
    Base(int x);
};

class Derived : public Base {
    using Base::Base;
};

Теперь я могу сделать:

Derived d (2);

Я думал, что объявления using имеют видимость того, где они расположены. Здесь он должен быть частным.

Из Язык программирования C++:

Доступ к имени, помещенному в область действия производного класса с помощью объявления-использования, определяется размещением объявления-использования;


person Community    schedule 28.08.2019    source источник


Ответы (1)


Согласно стандарту С++ 17 (10.3.3 Объявление использования)

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

person Vlad from Moscow    schedule 28.08.2019