.. title:: clang-tidy - modernize-use-default-member-init

modernize-use-default-member-init
=================================

This check converts a default constructor's member initializers into the new
default member initializers in C++11. Other member initializers that match the
default member initializer are removed. This can reduce repeated code or allow
use of '= default'.

.. code-block:: c++

  struct A {
    A() : i(5), j(10.0) {}
    A(int i) : i(i), j(10.0) {}
    int i;
    double j;
  };

  // becomes

  struct A {
    A() {}
    A(int i) : i(i) {}
    int i{5};
    double j{10.0};
  };

.. note::
  Only converts member initializers for built-in types, enums, and pointers.
  The `readability-redundant-member-init` check will remove redundant member
  initializers for classes.

Options
-------

.. option:: UseAssignment

   If this option is set to `true` (default is `false`), the check will initialize
   members with an assignment. For example:

.. code-block:: c++

  struct A {
    A() {}
    A(int i) : i(i) {}
    int i = 5;
    double j = 10.0;
  };

.. option:: IgnoreMacros

   If this option is set to `true` (default is `true`), the check will not warn
   about members declared inside macros.
