以下最小示例并非基于当前的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>(...)
答案 0 :(得分:2)
绝对是编译器错误。但是,它似乎已修复。使用Visual Studio 2019(MSVC版本19.20.27508.1)在此处构建…