Почему этот зависимый тип не считается специализацией при использовании аргумента шаблона?

Я пытаюсь сгруппировать специализации вместе, чтобы не писать их несколько раз. раз. Например, в приведенном ниже коде я пытаюсь выделить "float" и "double" как один из вариантов реализации foo::func(); Затем я использую другую реализацию для "bool".

template<typename T> struct foo;

template<typename T> struct bar;
template<> struct bar<float> { typedef float Type; };
template<> struct bar<double> { typedef double Type; };

/* specialize for float and double here */
template<typename T> struct foo<typename bar<T>::Type> {
    static void func() { ... }
};

template<> struct foo<bool> {
    static void func() { ... }
};

Эта ошибка отсутствует в GCC 4.4.3. (Это целевой компилятор, потому что он стандартный для Ubuntu Server 10.04 LTS, которому якобы осталось жить еще три года.) Ошибка:

foo.cpp:8: error: template parameters not used in partial specialization:
foo.cpp:8: error:         ‘T’

Ошибка относится к первой специализации foo (для "float" и "double".)

Я не вижу, какую часть C++ я здесь нарушаю - если кто-нибудь знает глава и стих, я был бы признателен. Кроме того, если кто-то знает другой способ достижения той же цели (повторное использование специализаций для определенных групп типов без излишне подробного кода), я также был бы признателен за любые предложения!

5
задан Jon Watte 17 April 2012 в 03:54
поделиться