C++,继承的拷贝ctors不起作用?

Voi*_*oid 3 c++ c++11

考虑以下代码:

class TBase {
public:
   TBase();
   TBase(const TBase &);
};

class TDerived: public TBase {
public:
   using TBase::TBase;
};

void f() {
   TBase Base;
   TDerived Derived(Base); // <=== ERROR
}
Run Code Online (Sandbox Code Playgroud)

所以,我有基类和派生类,并希望使用"使用TBase :: TBase"从基类拉复制ctor,以便能够以这种方式创建派生类的实例:

   TDerived Derived(Base);
Run Code Online (Sandbox Code Playgroud)

但是所有编译器都拒绝这些错误消息

7 : note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'TBase' to 'const TDerived' for 1st argument
Run Code Online (Sandbox Code Playgroud)

为什么?我究竟做错了什么?为什么"使用TBase :: TBase"在这种情况下不起作用?

更新 如何从cppreference.com解释以下代码?

struct B1 {
    B1(int);
};
struct D1 : B1 {
    using B1::B1;
// The set of inherited constructors is 
// 1. B1(const B1&)
// 2. B1(B1&&)
// 3. B1(int)
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 8

复制和移动consturctors(以及默认构造函数)永远不会被继承,只是因为标准这样说.所有其他构造函数都是.

对cppreference的评论是误导性的(1).标准中的相同评论说:

for 的继承构造函数的候选集D1B1

(强调我的).

然后标准继续说只有D1(int)构造函数实际上是继承的.复制和移动构造函数D1隐式声明为任何其他类,而不是继承.

有关详细信息,请参阅C++ 14 12.9 [class.inhctor].


(1)我提交了对cppreference的更改以希望澄清这一点.