c++ - 在模板参数列表中使用 sizeof... 时“模板参数太少”(MSVC 2017)
问题描述
以下最小示例不基于当前的 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)在此处构建...
推荐阅读
- javascript - 如何防止 Three.js OBJLoader 将我的 obj 的所有部分合并到 1 个网格中?
- sql - 如何将 exec 结果分配给多个 sql 变量?
- javascript - 如何包含外部 HTML 头?
- java - Java:如何验证自然语言文本
- multithreading - 创建两个可变引用,它们对 Rust 中的结构是线程安全的
- gradle - 无法使用 Gradle 构建 Git 项目
- python - 如何使用 Requests POST 方法从网站获取搜索结果?
- react-native - 为什么在更新到 macOS catalina 后立即在 react-native 中出现“Watchman crawl failed”错误?
- php - file_get_contents(): json 文件的文件名不能为空
- javascript - 量角器 - sendKeys md-contact-chips 不工作