编译递归模板时调用静态成员函数的类型不完整

时间:2012-05-23 16:32:56

标签: c++ templates cygwin

我在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上运行它。

1 个答案:

答案 0 :(得分:1)

您点击了实施的模板深度限制。您可以通过使用-ftemplate-depth=1005(现代GCC)或-ftemplate-depth-1005(较旧的GCC)进行编译来增加限制。