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;
}

これはコンパイルされません.2番目のdoStuff宣言は私に与えますerror: template-id ‘doStuff<1u, int, bool>’ for ‘void doStuff(int, bool)’ does not match any template declarationが、可変引数テンプレート引数を持つ最初の宣言と明らかに一致します.

可変個引数テンプレートを特殊化するには?

4

1 に答える 1

12

構文は正しいですが (私の知る限り、clang++ はそれを受け入れます)、コンパイラはおそらくまだ更新されていません。

gcc を使用する場合、その可変個引数テンプレートのサポートは非​​常に不完全であり、ごく最近の svn バージョンでさえ特殊化をまだサポートしていません (これは最先端のテクノロジを使用する場合と同じであり、悲しいことに gcc は非常に初期の不完全な可変個引数テンプレートしか実装していません)提案され、それ以来、clang はかなり遅れて開始されましたが、かなり完成しました)。

于 2011-10-14T12:21:17.847 に答える