模板参数列表中使用sizeof ...时“模板参数太少”(MSVC 2017)

时间:2019-04-18 08:40:21

标签: c++ visual-c++ c++14

以下最小示例并非基于当前的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 个答案:

答案 0 :(得分:2)

绝对是编译器错误。但是,它似乎已修复。使用Visual Studio 2019(MSVC版本19.20.27508.1)在此处构建…