https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65816

            Bug ID: 65816
           Summary: Constructor delegation does not perform
                    zero-initialization
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dyp-cpp at gmx dot net

In the following program, I expect the object `t` to be zero-initialized via
constructor delegation. Clang++ does this, but g++ 6.0 2015-04-20 does not.

-----------------------------

struct test
{
    int m;

    test() = default;
    test(int) : test() {}
};

#include <iostream>

int main()
{
    test t(0);
    std::cout << t.m;
}

-----------------------------

While C++14 IS [class.base.init]p6 is unclear about this, as far as I can tell,
paragraph 7 implies (in the parenthesized clause) that the constructor
`test(int)` is required to value-initialize the object:

> The expression-list or braced-init-list in a mem-initializer is used to 
> initialize the designated subobject (or, in the case of a delegating 
> constructor, the complete class object) according to the initialization rules 
> of 8.5 for direct-initialization.

The class `test` does not have a user-provided default constructor, hence
zero-initialization should be performed as per [dcl.init]p8.2

Reply via email to