Шаблонная специализация с вариационными шаблонами - PullRequest
19 голосов
/ 14 октября 2011
template <size_t size, typename ...Params>
void doStuff(Params...) {
}

template <>
void doStuff<size_t(1), int, bool>(int, bool) {

}

int main(int, char**) {
    doStuff<1,int,bool>(1, false);
    return 0;
}

Это не компилируется, второе объявление doStuff дает мне error: template-id ‘doStuff<1u, int, bool>’ for ‘void doStuff(int, bool)’ does not match any template declaration, но оно явно совпадает с первым объявлением с аргументами шаблона переменной.

Как специализировать шаблоны переменной?

1 Ответ

12 голосов
/ 14 октября 2011

Синтаксис правильный (afaik, и clang ++ принимает его), но ваш компилятор, вероятно, просто еще не обновлен.

Если вы используете gcc, его поддержка шаблонов с переменными значениями является довольно неполной, и даже совсем недавно svnверсии еще не поддерживают специализацию (именно так обстоит дело, когда вы используете новейшую технологию, и, к сожалению, gcc реализовал только очень раннее неполное предложение вариационных шаблонов и с тех пор не поспевал, пока clang начал довольно поздно, нополучил довольно полный)

...