1

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<500> が不平を言い、その前に以前のインスタンス化のリストがあり、「i - 1000 で static void LOOP::EXEC(int *) からインスタンス化された」などです。

LOOP<100> に変更すると、正常にコンパイルされます。

編集実装の制限に影響する場合は、cygwinでこれを実行しています。

4

1 に答える 1

1

実装のテンプレートの深さ制限に達しました。-ftemplate-depth=1005(最新の GCC) または-ftemplate-depth-1005(古い GCC)でコンパイルすることにより、制限を増やすことができます。

于 2012-05-24T13:02:58.513 に答える