This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-11-11
It is not clear from 9.3.4.7 [dcl.fct.default] whether the following is well-formed or not:
template<typename... T> void f2(int a = 0, T... b, int c = 1); f2<>(); // parameter a has the value 0 and parameter c has the value 1
(T... b is a non-deduced context per 13.10.3.6 [temp.deduct.type] paragraph 5, so the template arguments must be specified explicitly.)
Notes from the April, 2013 meeting:
CWG agreed that the example should be ill-formed.
Additional note (August, 2013):
9.3.4.7 [dcl.fct.default] paragraph 4 explicitly allows for a function parameter pack to follow a parameter with a default argument:
In a given function declaration, each parameter subsequent to a parameter with a default argument shall have a default argument supplied in this or a previous declaration or shall be a function parameter pack.
However, any instantiation of such a function template with a non-empty pack expansion would result in a function declaration in which one or more parameters without default arguments (from the pack expansion) would follow a parameter with a default argument and thus would be ill-formed. Such a function template declaration thus violates 13.8 [temp.res] paragraph 8:
If every valid specialization of a variadic template requires an empty template parameter pack, the template is ill-formed, no diagnostic required.
Although the drafting review teleconference of 2013-08-26 suggested closing the issue as NAD, it is being kept open to discuss and resolve this apparent contradiction.
Notes from the September, 2013 meeting:
CWG agreed that this example should be accepted; the restriction on default arguments applies to the template declaration itself, not to its specializations.