Note that the single-leading-underscore reservation is for the global namespace. I've been in a practice of using leading underscores in class scope (for private members) as opposed to something more clumsy like m_variablename for some time, which the standard has no issue with. Some sources would suggest changing to trailing underscores for class members instead just to be "extra safe" but I personally haven't found it compelling enough yet.
(While we're on the topic of collisions, I ran into one when porting Eigen to AVR: the use of B0, etc. as template parameters collided with the unfortunate use of them as preprocessor macros for binary. We'll never be collision-free, especially as long as preprocessor macros are used, but I figured I'd mention it anyway.
https://github.com/vancegroup/EigenArduino/commit/f66455adcd38c107714ec1a627d5e54e1a4c1306 )
Might it make sense to put that grep statement, and perhaps others, in a little "sanity check" script that could be run before commit? I don't know the Hg-fu to make it mandatory or automatic, but development culture could enforce it.
Ryan