# Extra Clang Tools 22.1.2 documentation

## clang-tidy - modernize-replace-disallow-copy-and-assign-macro

# modernize-replace-disallow-copy-and-assign-macro

Finds macro expansions of `DISALLOW_COPY_AND_ASSIGN(Type)` and replaces them with a deleted copy constructor and a deleted assignment operator.

Before the `delete` keyword was introduced in C++11 it was common practice to declare a copy constructor and an assignment operator as private members. This effectively makes them unusable to the public API of a class.

With the advent of the `delete` keyword in C++11 we can abandon the `private` access of the copy constructor and the assignment operator and delete the methods entirely.

When running this check on a code like this:

    class Foo {
    private:
      DISALLOW_COPY_AND_ASSIGN(Foo);
    };

It will be transformed to this:

    class Foo {
    private:
      Foo(const Foo &) = delete;
      const Foo &operator=(const Foo &) = delete;
    };

## Limitations

- Notice that the migration example above leaves the `private` access specification untouched. You might want to run the check modernize-use-equals-delete to get warnings for deleted functions in private sections.

## Options

MacroName

  A string specifying the macro name whose expansion will be replaced. Default is DISALLOW_COPY_AND_ASSIGN.

See: https://en.cppreference.com/w/cpp/language/function#Deleted_functions