mercredi 29 juillet 2015

Are multiple non-type template parameter packs allowed?

[temp.param] p11 says (in N4527):

(...) A template parameter pack of a function template shall not be followed by another template parameter unless that template parameter can be deduced from the parameter-type-list of the function template or has a default argument

In the context of non-type template parameter packs, there can't be default arguments,
so what exactly needs to be deduced for the packs (just the type, or the values, too)?

i.e. I'm wondering if this is allowed by the standard (C++11, 14 or 1z):

template<typename T, T... A, T... B>
void foo(T) {}

The first pack's values could be explicitly specified, but the second pack is "unreachable" and would always be empty if I'm not mistaken.

clang++-3.6 and g++-5.2 seem to accept these empty unreachable packs (even non non-type packs), but VC++ 14.0 refuses them with the error:

error C3547: template parameter 'B' cannot be used because it follows a template parameter pack and cannot be deduced from the function parameters of 'foo'

Aucun commentaire:

Enregistrer un commentaire