Perfect forwarding constructors are called instead of copy constructors if the forwarding reference provides a closer match (e.g. with non-const parameter). This can be confusing to developers unfamiliar with this feature.
class Person { public: // perfect forwarding ctor template<typename T> explicit Person(T&& n) {} // (possibly compiler generated) copy ctor Person(const Person& rhs); };
For detailed explanation of the issue, see Scott Meyers' Effective Modern C++, Item 26.
Running the checker on the LLVM source produces warnings for the following constructors:
https://github.com/llvm-mirror/llvm/blob/master/include/llvm/ADT/iterator.h#L287
https://github.com/llvm-mirror/llvm/blob/master/include/llvm/ADT/iterator_range.h#L39
https://github.com/llvm-mirror/llvm/blob/master/include/llvm/Support/Allocator.h#L150
These are probably not errors, but the described issue does occur (i.e. the perfect forwarding constructor can be called instead of the default copy), so it may worth a double-check.