On Sun, Jul 8, 2012 at 6:41 AM, Johannes Schaub
<[email protected]> wrote:
> Am 05.07.2012 10:39, schrieb Richard Smith:
>> Author: rsmith
>> Date: Thu Jul 5 03:39:21 2012
>> New Revision: 159733
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=159733&view=rev
>> Log:
>> PR13273: When performing list-initialization with an empty initializer list,
>> actually perform value initialization rather than trying to fake it with a
>> call
>> to the default constructor. Fixes various bugs related to the
>> previously-missing
>> zero-initialization in this case.
>>
> ...
>> +namespace explicit_default {
>> + struct A {
>> + explicit A(); // expected-note{{here}}
>> + };
>> + A a {}; // ok
>> + // This is copy-list-initialization, and we choose an explicit constructor
>> + // (even though we do so via value-initialization), so the initialization
>> is
>> + // ill-formed.
>> + A b = {}; // expected-error{{chosen constructor is explicit}}
>> +}
>> +
>
> Richard, I'm pretty sure that this is valid code. A value-initialization
> doesn't respect "explicit". Are you assuming a C++ Standard defect here?
The law governing this initially _seems_ to be "An explicit
constructor constructs objects just like non-explicit constructors,
but does so only where the direct-initialization syntax (8.5) or where
casts (5.2.9, 5.4) are explicitly used."
Based on that, copy-list-initialization doesn't qualify, even though
it is value-initialization in this case. It's not
direct-initialization, and it's not a cast.
The standard (or at leas the FDIS) continues to say "A default
constructor may be an explicit constructor; such a constructor will be
used to perform default-initialization or value-initialization (8.5)"
without saying whether this overrides the previous sentence.
I believe that Richard's interpretation is consistent with both of
these: explicit default constructors can be used to perform
value-initialization, but only via the direct-initialization syntax
(specifically, "T x{a}", where "a" is empty in this case).
-- James
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits