У меня есть следующая оболочка 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 исправляет это и может быть исправлено только с круглыми скобками вместо фигурных скобок. Какой из них правильный?