Unless otherwise specified, algorithms that take function objects as arguments
are permitted to copy those function objects freely.
Programmers for whom object
identity is important should consider using a wrapper class that points to a
noncopied implementation object such as reference_wrapper<T>
), or some equivalent solution.
— end note