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でこれを実行しています。