Следующий минимальный пример не основан на текущем 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>(...)
- Удаление приведения (не решение в реальном мире кода, только в минимальном примере)