.. title:: clang-tidy - cert-dcl21-cpp

cert-dcl21-cpp
==============

This check flags postfix ``operator++`` and ``operator--`` declarations
if the return type is not a const object. This also warns if the return type
is a reference type.

The object returned by a postfix increment or decrement operator is supposed
to be a snapshot of the object's value prior to modification. With such an
implementation, any modifications made to the resulting object from calling
operator++(int) would be modifying a temporary object. Thus, such an
implementation of a postfix increment or decrement operator should instead
return a const object, prohibiting accidental mutation of a temporary object.
Similarly, it is unexpected for the postfix operator to return a reference to
its previous state, and any subsequent modifications would be operating on a
stale object.

This check corresponds to the CERT C++ Coding Standard recommendation
DCL21-CPP. Overloaded postfix increment and decrement operators should return a
const object. However, all of the CERT recommendations have been removed from
public view, and so their justification for the behavior of this check requires
an account on their wiki to view.