4

以下代码片段在 Clang 3.4/3.5 (Xcode 5/6) 下构建得非常好,但在 Visual C++ 14 CTP3 下抛出错误:

1>----- 构建开始:项目:InheritingConstructor,配置:
调试 Win32 ------ 1>inheritingconstructor.cpp(60):错误 C2661:
'D::D':没有重载函数需要 2 个参数
========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========

通过尝试从基类继承模板构造函数,代码确实给编译器带来了一些压力,也许这就是 Visual C++ 在竞争中再次失败的地方?或者我在标准中遇到了一些灰色区域因此未定义的行为?

#include "stdafx.h" // comment out this line for Xcode build
#include <iostream>
#include <type_traits>

template <typename X>
struct B
{
    int i;
    B(int i_) : i(i_) {}

    template < typename T, typename = typename std::enable_if<
        std::is_same<T, X>::value >::type >
    B(const T*, const T*) : i(0) {}
};

struct D : B<D>
{
    using B<D>::B; // inherit constructors from B
};

int main(int argc, const char * argv[]) {
    // insert code here...
    D d((D*)nullptr, (D*)nullptr);
    std::cout << "Hello, World!\n";
    return 0;
}
4

1 回答 1

4

从标准合规性的角度来看,您的代码没有任何问题。

VC++2013 LINK中没有实现继承构造函数

然而,正如这个LINK所暗示的,这种功能是从 VC++2014 CTP 1 开始实现的。

稍微挖掘一下,我发现今天早上LINK报告了具有相同示例的完全相同的错误

底线:这是一个已经报告的 VC++2014 错误。

于 2014-10-01T20:39:07.287 回答