У меня проблемы с пониманием правильного поведения наследующих конструкторов из базового класса.В моем конкретном случае у меня есть базовый класс crtp с частными конструкторами, чтобы предотвратить создание базового класса (как абстрактного класса).Теперь crtp-base оказывает поддержку производному классу, а производный класс наследует конструкторы базового класса с помощью оператора using.Это хорошо работает для конструктора по умолчанию, копирования и перемещения, но не работает для пользовательских конструкторов.Есть ли способ достичь этого без повторного использования всех конструкторов в производном классе?
#include <iostream>
template <typename d_t>
class base
{
friend d_t;
base()
{
std::cout << "base: ctor()\n";
}
base(base const & other) = default;
base(base && other) = default;
base(int)
{
std::cout << "base: ctor()\n";
}
};
class derived: public base<derived>
{
public:
using base<derived>::base;
};
int main()
{
derived d{};
derived d1{d};
derived d2{std::move(d1)};
// derived d3{1}; //does not compile!
}
EDIT
AFAIK cppreference говорит, что доступностьКонструкторы не изменяются спецификатором доступа объявления using в производном классе, который отличается от других функций-членов.Но я видел подобный код, который компилируется и запускается, и я не уверен, правильно ли я понял объявление об использовании.Конечно, я изучу другой код дальше, чтобы увидеть, что происходит, но я хотел знать, есть ли что-то скрытое, что я мог бы пропустить.