Finds instances of namespaces concatenated using explicit syntax, such as namespace a { namespace b { [...] }} and offers fix to glue it to namespace a::b { [...] }.
Properly handles inline and unnamed namespaces. Also, detects empty blocks in nested namespaces and offers to remove them.
Test with common use cases included.
I ran the check against entire llvm repository. Except for expected nested namespace definitions only available with -std=c++17 or -std=gnu++17 warnings I noticed no issues when the check was performed.
Example:
namespace a { namespace b { void test(); }}
can become
namespace a::b { void test(); }