【发布时间】:2023-02-24 20:45:43
【问题描述】:
我正在使用以下代码构建“查找表”。不幸的是,GCC 拒绝编译它并带有消息Instantiating fold expression with 581 arguments exceeded expression nesting limit of 256。
template<std::size_t ...parameters>
static constexpr auto buildOffsets(std::index_sequence<parameters...>)
{
constexpr std::array<uint16_t, sizeof...(parameters)> out = {
((parameter_traits::offset_of<static_cast<ParameterId>(parameters)>), ...)
};
return out;
}
知道如何绕过这个限制吗?还有其他方法可以构建这个数组吗?
【问题讨论】:
-
offset_of里面有什么? -
如果将它替换为
out = {static_cast<uint16_t>(parameter_traits::offset_of<static_cast<ParameterId>(parameters)>)...};,你会遇到同样的问题吗? -
顺便说一句,你能提供一个 minimal reproducible example 并告诉我们你使用的是什么版本的 g++ 吗?
-
您使用逗号折叠表达式来实例化查找表的事实是错误的。折叠表达式是一初始值设定项。这不是一个查找表。
-
对于@TedLyngmo 的建议,这似乎是上面评论所解释的错字。当然,编译器仍然可能施加限制,但我希望它不会那么低。但错误消息指的是嵌套,所以你也可能在那里有一些意外的递归(我们无法确定,因为你没有显示整个代码)。