Развертывание циклов с использованием шаблонов в C ++ с частичной специализацией

Я пытаюсь использовать шаблоны для развертывания цикла в C ++ следующим образом.

#include <iostream>

template< class T, T i >
struct printDown {
    static void run(void) {
        std::cout << i << "\n";
        printDown< T, i - 1 >::run();
    }
};

template< class T >
struct printDown< T, 0 > {
    static void run(void) {
        std::cout << 0 << "\n";
    }
};

int main(void) {
    printDown< int, 10 >::run();
    return 0;
}

Когда я компилирую w / g ++ 3.4 .4 в Cygwin, я получаю следующую ошибку.

tmp.cpp: 12: error: type T 'of аргумент шаблона 0 'зависит от параметр (ы) шаблона

Что я делаю не так? Мне нужно как-то аннотировать 0, чтобы сказать, что это тип T?

Заранее спасибо.

6
задан HostileFork 14 November 2012 в 18:50
поделиться