Any particular reason for these leading underscores? I'm not sure I like python conventions leaking into C++. I checked the standards and it seems like identifiers with a leading underscore are only actually reserved in the global namespace, but double underscores are reserved everywhere, so I think it's probably best to avoid the use of any python conventions in C++.