我在windows上使用g ++版本3.4.4编译此代码: -
#include <iostream>
template< int i >
class LOOP{
public:
static inline void EXEC(int* count){
(*count)++;
LOOP< i-1 >::EXEC(count);
}
};
template<> class LOOP< 0 >{
public:
static inline void EXEC(int* count){
(*count)++;
}
};
int main(int i){
int barely = 0;
LOOP< 1000 >::EXEC(&barely);
}
它抱怨,不完整类型LOOP&lt; 500&gt;在嵌套的名称说明符中使用,并且具有之前的先前实例化的列表,“从静态void LOOP :: EXEC(int *)实例化,其中包含i - 1000”等等。
当我将其更改为LOOP&lt; 100&gt;时它编译得很好。
编辑如果这会影响实施限制,我会在cygwin上运行它。
答案 0 :(得分:1)
您点击了实施的模板深度限制。您可以通过使用-ftemplate-depth=1005
(现代GCC)或-ftemplate-depth-1005
(较旧的GCC)进行编译来增加限制。