C++ 11委托构造函数和typedef

Ren*_*aud 1 c++ c++11 visual-studio-2013

我尝试在visual studio 2013(社区版)中编译一些代码,但我遇到了问题:以下代码拒绝编译.

struct X
{
    X(double y);
};

typedef X Z;
struct Y : public Z
{
    using Z::Z;            
};
Run Code Online (Sandbox Code Playgroud)

问题是使用Z :: Z的行.它给了我一个错误C2039:'Z':不是'X'的成员

这段代码有效吗?或者这是一个错误?

Rei*_*ica 5

您正在使用的功能是继承构造函数,而不是委托构造函数.并且根据MSDN,VS 2013 RTM不支持继承构造函数.

VS 2013 确实支持委托构造函数,但这是一个不同的特性 - 一个构造函数将成员初始化委托给另一个.这将是一个例子:

struct X
{
  int i;

  X(int i) : i(i) {}

  X() : X(42) {}  // delegating constructor
};
Run Code Online (Sandbox Code Playgroud)

如果需要在不支持该编译器的编译器中继承构造函数,可以通过定义完美转发构造函数来创建一个变通方法.这不是100%相同的效果,但它对于大多数用途应该足够好:

struct Y : X
{
  template <class... Arg>
  Y(Arg &&... arg) : X(std::forward<Arg>(arg)...) {}
};
Run Code Online (Sandbox Code Playgroud)

它不具有与noexcept基类构造函数相同的特性,但是再次,VS 2013不支持noexcept.