我想在模板化的类中包含一个类constexpr的静态constexpr数组,类似于以下代码:
struct Element { unsigned i; constexpr Element (unsigned i) : i(i) { } }; template <bool Reverse> struct Template { static constexpr Element element[] = { Element (Reverse ? 1 : 0),Element (Reverse ? 0 : 1),}; }; int main (int argc,char **argv) { return Template<true>::element[0].i; }@H_404_3@当然,实际的Element结构比这个例子更复杂,但它已经显示出问题.如果我编译这个机智gcc我得到一个关于递归依赖的错误:
test.cc: In instantiation of ‘constexpr Element Template<true>::element [2]’: test.cc:11:27: recursively required from ‘constexpr Element Template<true>::element [2]’ test.cc:11:27: required from ‘constexpr Element Template<true>::element [2]’ test.cc:20:2: required from here test.cc:11:27: fatal error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) static constexpr Element element[] = { ^ compilation terminated.@H_404_3@
解决方法
您需要指定Element数组的大小.元素元素[]无效c.
template <bool Reverse> struct Template { static constexpr Element element[2] = { Element (Reverse ? 1 : 0),}; };@H_404_3@