maintainability-agent docs
Languages

C++

Free functions, class and struct members, constructors, destructors, operator overloads, and the types themselves — class, struct, union, enum and enum class. A type is descended into, because that is where its methods live; a function body is stepped over once its end is known, so nothing inside one is read as a declaration.

Names are reported the way a reader searches for them. An out-of-line definition keeps its qualification — void geo::Widget::draw() is geo::Widget::draw, not a second draw indistinguishable from every other class's. An operator overload is operator==. A template <...> header is stripped, so the declaration under it is measured rather than the template line.

A bodyless declaration is not a definition, as in C: a prototype, a pure virtual (virtual int area() const = 0;) and = default / = delete all mint nothing. A header of forty declarations is not forty declarations.

Everything it misses, it misses in the safe direction:

.h remains C, not C++: it is the one extension both languages write, and the C reading under-reports a C++ header (finding its free functions and structs, missing its classes) where the reverse would invent nothing but read nothing either.

Complexity for C++ is the same keyword count used everywhere else here. lizard covers C++ and is in the shipped pool when the number has to be exact.