【发布时间】:2022-01-19 09:21:49
【问题描述】:
我遇到了一个奇怪的问题,MSVC 不允许我使用折叠表达式来初始化以下数组:
#include <iostream>
template <typename T, std::size_t ...dims>
class Matrix {
public:
void print()
{
std::cout << (... + dims) << '\n';
}
T matrix[(... + dims)]; // <-- error C2059: syntax error: '...'
};
int main()
{
Matrix<int, 3, 3, 3> m;
m.print();
Matrix<int, 3, 2, 1> n;
n.print();
return 0;
}
以下是错误:
(10): 错误 C2059: 语法错误: '...' (11): 注意: 见 对类模板实例化“矩阵”的引用 已编译 (10): 错误 C2238: ';' 前面的意外标记
我尝试了 GCC,一切正常!
是否有任何解决方法可以直接使用折叠表达式通过 MSVC 初始化数组?
非常感谢你们!
【问题讨论】:
-
与 GCC 和 C++17 一起工作 here。
-
我撤回了我的评论。我没有意识到错误是在 third 使用
...时出现的——如果它确实是编译器无法识别语法的问题,它会首先抱怨前面的 2 个实例行。我在带有/std:c++20的 VC19.30 上尝试了它,错误也在那里重现。 -
@Evg 这个可行,但我不喜欢使用虚拟变量,而我可以直接使用折叠表达式!
-
@NimaGhorab 那么您可能需要更改编译器。它看起来像 MSVC 中的一个错误。
g++和clang++都编译得很好。你在 VS2022 beta 中试过了吗? -
@TedLyngmo 是的,我尝试使用最新版本的 MSVC,但错误仍然存在。
标签: c++ arrays variadic-templates fold-expression