«слишком мало аргументов шаблона» при использовании sizeof ... в списке параметров шаблона (MSVC 2017) - PullRequest
4 голосов
/ 18 апреля 2019

Следующий минимальный пример не основан на текущем MSVC 2017 (19.16).Он основан на MSVC 2015 и более старых версиях 2017 года (19.14), GCC, Clang и ICC.Так что я подозреваю, что это ошибка компилятора.Это действительно?Если нет, то почему?

#include <array>
#include <utility>

template<int... Is>
auto foo(std::integer_sequence<int, Is...>)
{
    return std::array<int, unsigned(sizeof...(Is))>{ Is... };
}

std::array<int, 3> bar()
{
    return foo(std::make_integer_sequence<int, 3>());
}

Работающие варианты:

  • Включение unsigned(sizeof...(Is)) в список параметров в качестве параметра по умолчанию
  • Замена unsigned(...)с static_cast<unsigned>(...)
  • Удаление приведения (не решение в реальном мире кода, только в минимальном примере)

1 Ответ

2 голосов
/ 18 апреля 2019

Определенно ошибка компилятора. Тем не менее, кажется, это было исправлено. Строится здесь с помощью Visual Studio 2019 (версия MSVC 19.20.27508.1) & hellip;

...