使用花括号而非圆括号,Visual Studio会崩溃

3
我有以下关于std::make_unique的包装器:
template <typename Element, typename... ArgTypes>
auto makeUnique(ArgTypes&&... arguments) {
  return std::make_unique<Element>(std::forward<ArgTypes>(arguments)...);
}

这是这样使用的:

template <typename F>
static auto createCustomValidator(F &&validator) {
    auto func = [validator = std::forward<F>(validator)](const int val){ return validator(seconds(val)); };
    return makeUnique<property::CustomDoubleValidator<decltype(func)>>( std::move(func) );
}

之前的 Visual Studio 版本接受以下内容:

return makeUnique<property::CustomDoubleValidator<decltype(func)>>{ std::move(func) };

注意std::move周围的花括号

Visual Studio 16.5破坏了这个,只能用圆括号而不是花括号来修复。哪一个是正确的?


makeUnique<property::CustomDoubleValidator<decltype(func)>> 是一个函数,因此必须使用括号进行调用。 - sparik
@sparik,所以之前VS出了问题? - ruipacheco
是的。除非我漏掉了什么。 - sparik
自从 C++11 以来,我们可以使用花括号初始化列表对对象进行初始化。我建议您可以参考文档:列表初始化 - Jeaninez - MSFT
1
@sparik想回复一下,这样我就可以给你奖励分数了吗? - ruipacheco
我写了一个答案。谢谢。 - sparik
1个回答

1
"

makeUnique<property::CustomDoubleValidator<decltype(func)>>是一个函数,因此必须使用括号进行调用。正确的答案肯定是括号。

之前的Visual Studio版本可能接受大括号作为扩展,但不再支持该写法。

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接