C++ Visual Studio在使用大括号而不是圆括号时中断

C++ Visual Studio在使用大括号而不是圆括号时中断,c++,visual-studio,c++17,C++,Visual Studio,C++17,我有以下std::make_unique包装: template <typename Element, typename... ArgTypes> auto makeUnique(ArgTypes&&... arguments) { return std::make_unique<Element>(std::forward<ArgTypes>(arguments)...); } 模板 auto makeUnique(ArgTypes&&…

我有以下std::make_unique包装:

template <typename Element, typename... ArgTypes>
auto makeUnique(ArgTypes&&... arguments) {
  return std::make_unique<Element>(std::forward<ArgTypes>(arguments)...);
}
模板
auto makeUnique(ArgTypes&&…参数){
返回std::make_unique(std::forward(参数)…);
}
其使用方式如下:

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) );
}
模板
静态自动createCustomValidator(F&&validator){
auto-func=[validator=std::forward(validator)](const int val){return validator(seconds(val));};
返回makeUnique(std::move(func));
}
Visual Studio的早期版本接受以下内容:

return makeUnique<property::CustomDoubleValidator<decltype(func)>>{ std::move(func) };
返回makeUnique{std::move(func)};
(注意std::move周围的花括号)

VisualStudio16.5打破了这一点,只能用括号而不是大括号来修复。哪一个是正确的?

makeUnique是一个函数,因此必须用括号调用它。正确答案肯定是括号


以前版本的Visual Studio可能接受大括号作为扩展。

makeUnique是一个函数,因此必须使用parentheses@sparik那么VS以前坏过?是的。除非我在C++11之后遗漏了什么,否则我们从带括号的init列表中初始化一个对象。我建议你可以参考医生:@sparik想要回复,这样我就可以奖励你分数了?