Finds non-static member functions that can be made const or static.
The check conservatively tries to preserve logical costness in favor of
physical costness. It will not recommend to make member functions const
that call (const) member functions on a non-static data members,
e.g. std::unique_ptr::get because that might indicate logical
non-costness. Currently, it will only make member functions const if they
only access to this is to read members of builtin type.
I have run this check (repeatedly) over llvm-project. It made 1708 member functions
static. Out of those, I had to exclude 22 via NOLINT because their address
was taken and stored in a variable of pointer-to-member type (e.g. passed to
It also made 243 member functions const. (This is currently very conservative
to have no false-positives and can hopefully be extended in the future.)
You can find the results here: https://github.com/mgehre/llvm-project/commits/static_const_eval