Тип функции в шаблоне не компилируется

Я играл с вариативными параметрами шаблона, используя gcc 4.6.1. Следующий код компилируется, как ожидалось:

template<typename RetType, typename... ArgTypes>
class Event;

template<typename RetType, typename... ArgTypes>
class Event<RetType(ArgTypes...)>
{
public:
    typedef function<RetType(ArgTypes...)> CallbackType;

    void emit(ArgTypes...args)
    {
        for (CallbackType callback : callbacks)
        {
            callback(args...);
        }
    }

private:
    vector<CallbackType> callbacks;
};

Но, к моему удивлению, следующая «нормальная» версия, имеющая только один «Тип аргумента», не компилируется:

template<typename RetType, typename ArgType>
class Event;

template<typename RetType, typename ArgType>
class Event<RetType(ArgType)> // <- error: wrong number of template arguments (1, should be 2)
{};

g ++ 4.6.1 выдает ошибку, как в комментарии.

Кто-нибудь знает, почему это вызывает ошибку и как заставить ее работать? Кроме того, правильно ли я думаю, что приведенный выше код является формой «частичной специализации шаблона»?

5
задан Xeo 16 January 2012 в 21:41
поделиться