Подтвердить что ты не робот

Шаблонная специализация с вариативными шаблонами

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, но оно явно соответствует первому объявлению с аргументами вариационного шаблона.

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

4b9b3361

Ответ 1

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

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