.. title:: clang-tidy - performance-for-range-copy

performance-for-range-copy
==========================

Finds C++11 for ranges where the loop variable is copied in each iteration but
it would suffice to obtain it by const reference.

The check is only applied to loop variables of types that are expensive to copy
which means they are not trivially copyable or have a non-trivial copy
constructor or destructor.

To ensure that it is safe to replace the copy with a const reference the
following heuristic is employed:

1. The loop variable is const qualified.
2. The loop variable is not const, but only const methods or operators are
   invoked on it, or it is used as const reference or value argument in
   constructors or function calls.

Options
-------

.. option:: WarnOnAllAutoCopies

   When `true`, warns on any use of ``auto`` as the type of the range-based for
   loop variable. Default is `false`.

.. option:: AllowedTypes

   A semicolon-separated list of names of types allowed to be copied in each
   iteration. Regular expressions are accepted, e.g. ``[Rr]ef(erence)?$``
   matches every type with suffix ``Ref``, ``ref``, ``Reference`` and
   ``reference``. The default is empty. If a name in the list contains the
   sequence `::`, it is matched against the qualified type name
   (i.e. ``namespace::Type``), otherwise it is matched against only the
   type name (i.e. ``Type``).
