20
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,但它清楚地将第一个声明与可变参数模板参数相匹配。

如何专门化可变参数模板?

4

1 回答 1

12

语法是正确的(afaik,并且 clang++ 接受它),但是您的编译器可能还没有更新。

如果你使用 gcc,它的可变参数模板支持是相当不完整的,甚至最近的 svn 版本还不支持专业化(这就是你使用尖端技术时的情况,遗憾的是 gcc 只实现了一个非常早期的不完整可变参数模板提案,从那以后没有跟上太多,虽然clang开始得很晚,但已经很完整了)

于 2011-10-14T12:21:17.847 回答