Are you just interested in checking the existing code or want to make sure that the code avoids this problem and are ready to reverse engineer the interfaces?
In the latter case:
If you have many arguments of the same type, then inconsistencies can be a problem (and I saw worse than your example):
void foo(bool fast, bool small, bool trivial); foo(true, false, false);
What you're asking for is a way to ensure consistency between the declaration and the definition of foo, but you ignore the inconsistencies between the call and the declaration.
Another solution is to instead create an argument structure using setRoutines. Sort of:
struct FooArg { bool fast, small, trivial; FooArg &setFast(bool fast_) {fast=fast_;return *this;}; ... }; void foo(FooArg const&); foo(FooArg().setFast(true).setSmall(false)...);
Then you avoid inconsistencies between declaration, definition and invocation, but should be more detailed. (I'm sure there is some kind of answer about this technique.)
source share