Почему использование пакета параметров целочисленного значения запрещено после пакета параметров типа в C ++ 11?

Вопрос почти не имеет смысла без примера. Итак, вот что я пытаюсь сделать.

В целом C ++ допускает следующее:

template<class T, class U, T t, U u>
void func() {}

func<char, int, 'A', 10>();

Но кажется, что его естественное вариативное расширение не работает.

template<class...T, T... t>
void func() {}

func<char, int, 'A', 10>(); 

И clang, и g ++ 4.7 отклоняют приведенный выше код. Ошибка отображается там, где выполняется создание экземпляра. Мне кажется, что два списка с переменными числами следует анализировать однозначно, потому что первый имеет типы, а другой - только целые значения.

Если вышеперечисленное не предназначено для работы, я думаю, что следующее тоже не сработает.

template <class Ret, class... Args, Ret (*func)(Args...)>
class Foo {};

Я считаю, что шаблон Foo весьма полезен.

8
задан Xeo 12 January 2012 в 05:48
поделиться