【发布时间】:2016-04-15 21:38:21
【问题描述】:
以下简单代码在newest Visual Studio compiler(MSVC 2015 Update 2)中产生错误:
struct Foo
{
template<typename ... Args, typename = std::enable_if_t<sizeof...(Args) != 0> >
Foo(Args ...) {}
Foo() = default; // error
//Foo() {} //this works!
};
错误信息是
错误 C2580: 'Foo::Foo(void)': 不允许使用多个版本的默认特殊成员函数
gcc 毫无问题地接受它。
在我看来,这似乎是一个明显的错误(从某种意义上说,它不受标准支持)。还有其他意见吗?
【问题讨论】:
-
只有一点点相关:我对 VS2015 的 UPD2 非常不满意,这几乎是可笑的,如果不是因为那堆热气腾腾的一堆东西破坏了@work。相关:clang 吃掉这个也没问题。
-
我猜这是因为缺少两阶段查找?哦,我在开玩笑,我不知道。前段时间我停止了关注真正的热气腾腾的堆(即C++)的发展。
-
对我来说看起来像一个错误。如果您对解决方法感兴趣,可以将其设为
template <typename Arg, typename... Args> Foo(Arg, Args...);这可能是确保模板化构造函数至少采用一个参数的更直接的方法。
标签: c++ visual-c++ visual-studio-2015