#include <iostream>
class Base
{
protected:
template<typename ...Args>
Base(Args ...args)
{
std::cout << "variadic ctor" << std::endl;
}
template<typename T>
Base(T t)
{
std::cout << "template ctor" << std::endl;
}
Base(char const *s)
{
std::cout << s << std::endl;
}
};
class Derived : public Base
{
protected:
using Base::Base;
};
int main(int, char**) noexcept
{
//Base bv{ 0, 1 }; // error: 'Base::Base(Args ...) [with Args = {int, int}]' is protected within this context
//Base bt{ 0 }; // error: 'Base::Base(T) [with T = int]' is protected within this context
//Base bs{ "base" }; // error: 'Base::Base(const char*)' is protected within this context
Derived dv{ 0, 1 };
Derived dt{ 0 };
//Derived ds{ "derived" }; // error: 'Derived::Derived(const char*)' is protected within this context
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZQp7CnByb3RlY3RlZDoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICBCYXNlKEFyZ3MgLi4uYXJncykKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgInZhcmlhZGljIGN0b3IiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgQmFzZShUIHQpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJ0ZW1wbGF0ZSBjdG9yIiA8PCBzdGQ6OmVuZGw7CiAgICB9CgogICAgQmFzZShjaGFyIGNvbnN0ICpzKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBzIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZQp7CnByb3RlY3RlZDoKICAgIHVzaW5nIEJhc2U6OkJhc2U7Cn07CgppbnQgbWFpbihpbnQsIGNoYXIqKikgbm9leGNlcHQKewogICAgLy9CYXNlIGJ2eyAwLCAxIH07IC8vIGVycm9yOiAnQmFzZTo6QmFzZShBcmdzIC4uLikgW3dpdGggQXJncyA9IHtpbnQsIGludH1dJyBpcyBwcm90ZWN0ZWQgd2l0aGluIHRoaXMgY29udGV4dAogICAgLy9CYXNlIGJ0eyAwIH07IC8vIGVycm9yOiAnQmFzZTo6QmFzZShUKSBbd2l0aCBUID0gaW50XScgaXMgcHJvdGVjdGVkIHdpdGhpbiB0aGlzIGNvbnRleHQKICAgIC8vQmFzZSBic3sgImJhc2UiIH07IC8vIGVycm9yOiAnQmFzZTo6QmFzZShjb25zdCBjaGFyKiknIGlzIHByb3RlY3RlZCB3aXRoaW4gdGhpcyBjb250ZXh0CiAgICBEZXJpdmVkIGR2eyAwLCAxIH07CiAgICBEZXJpdmVkIGR0eyAwIH07CiAgICAvL0Rlcml2ZWQgZHN7ICJkZXJpdmVkIiB9OyAvLyBlcnJvcjogJ0Rlcml2ZWQ6OkRlcml2ZWQoY29uc3QgY2hhciopJyBpcyBwcm90ZWN0ZWQgd2l0aGluIHRoaXMgY29udGV4dAogICAgcmV0dXJuIDA7Cn0K