http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49205
--- Comment #2 from Johannes Schaub <schaub.johannes at googlemail dot com> 2011-05-28 01:45:29 UTC --- (In reply to comment #1) > While this behavior is erroneous, consensus at clang was that WG21 made an > oversight in allowing this. Template constructors are banned from being copy > or > move constructors, and historically this prohibition was not necessary for > default constructors since there was no special handling of them except when > implicit. That rationale makes sense. I wonder about the implications for value initialization though. If that constructor is not a default constructor, then "A();" appears to be ill-formed, because of the saying in 8.5p7 that we shall call "the default constructor". Also, how should the rules be drawn? Is any template not a default constructor? Then what about the following? template<typename T = int> A(T = 0); GCC appears to deem it a default constructor. Is the following rule acceptable? - A default constructor is a constructor with zero parameters or that only has parameters with default arguments and with an optional trailing ellipsis ("A(int, ...)").