Visual Studio разрывается при использовании фигурных скобок вместо скобок - PullRequest
3 голосов
/ 07 апреля 2020

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

1 Ответ

1 голос
/ 09 апреля 2020

makeUnique<property::CustomDoubleValidator<decltype(func)>> - это функция, поэтому ее необходимо вызывать в скобках. Правильный ответ определенно заключен в скобки.

Возможно, в предыдущих версиях Visual Studio в качестве расширения были приняты фигурные скобки.

...