I understand the noble reasons for the current writing, but I have
two reasons why I think that the current text should be changed:
1) IMO the current writing of the criticized paragraph is more
than my corrected version. Isn't there at least a trailing ",
missing (if my foreigner english takes me right...) to make clear that
only *one* of those cases apply?
2) Your basic argument holds, but I strongly think that exactly this
paragraph is the wrong place to clarify this issue. Please note that
we could argue for similar reasons that the description of
[allocator.members]/13 should have this important note, the
current text is simply given by:
template <class... Args> void construct(pointer p, Args&&... args);
Effects: ::new((void *)p) T(std::forward<Args>(args)...)
A call to std::allocator::construct with only a single argument *will*
invoke the above template overload of construct.
I have to possible locations in my mind where a proper
implementation-relevant note could be added:
a) [expr.new]/16, second (or third?) bullet: Add a footnote which says
along the lines of: "An empty parameter expansion is equivalent to the
b) [dcl.init]/8: As part of the already given note just after the
starting with "The form () is permitted[..]" add one further sentence
lines of "An empty parameter expansion is equivalent to the form ()".
What do you think?
Greetings from Bremen,
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:firstname.lastname@example.org ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.yqcomputer.com/