Jul 24, 2014

[C++11] user-provided definition vs. default

How is “=default” different from “{}” for default constructor and destructor?



From §8.5 [dcl.init]/7:
    If a program calls for the default initialization of an object of a const-qualified type T, T shall be a class type with a user-provided default constructor.
      Using = default does not result in a user-provided default constructor, as can be seen in §8.4.2 [dcl.fct.def.default]/4:
        A function is user-provided if it is user-declared and not explicitly defaulted or deleted on its first declaration.
          The member is default-initialized per §12.6.2 [class.base.init]/8:
            In a non-delegating constructor, if a given non-static data member or base class is not designated by a mem-initializer-id (including the case where there is no mem-initializer-list because the constructor has no ctor-initializer) and the entity is not a virtual base class of an abstract class (10.4), then
              — if the entity is a non-static data member that has a brace-or-equal-initializer , the entity is initialized as specified in 8.5;
                — otherwise, if the entity is an anonymous union or a variant member (9.5), no initialization is performed;
                  — otherwise, the entity is default-initialized (8.5).

                  No comments:

                  Post a Comment

                  Note: Only a member of this blog may post a comment.