c++ - 在模板参数列表中使用 sizeof... 时为 "too few template arguments"(MSVC 2017)

标签 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>(...)
  • 移除强制转换(不是现实世界代码中的解决方案,仅在最小示例中)

最佳答案

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

关于c++ - 在模板参数列表中使用 sizeof... 时为 "too few template arguments"(MSVC 2017),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55742234/

相关文章:

c++ - 有条件地禁用复制构造函数

C++ 内联汇编 : how to deal with references?

c++ - 模板化函数指针作为模板参数

c++ - 为什么我会收到未使用的 lambda 捕获警告?

c++ - 如何访问 integer_sequence 的第 n 个值?

c++ - 通用 lambda 不能在命名空间中使用?

c++ - 转换问题

c++ - 确定日期之间的差异

c++ - 使用基于 bool 值的两种方法之一调用方法时如何确保避免分支预测错误

c++ - 为什么我的打印功能不起作用?链表