
David Abrahams wrote:
Daniel James <daniel@calamity.org.uk> writes:
He adds an extra type parameter to get multiple counters. The function overloads are generated by friend functions of a templated class, which is probably not standard compliant - it doesn't work in strict mode on EDG compilers.
Right. Boost.Python used to do that. Came as a terrible shock when I discovered it can't work.
Peder Holt tried to fix this by making the class a parameter to the function, here: http://lists.boost.org/MailArchives/boost/msg70381.php but it still doesn't work in strict mode. I guess because it relies on an implicit cast from int to the type, but I'm not sure. I don't fully understand why the operators library works and this doesn't.
Goran Mitrovic's version declares the functions in macros, so it works in strict mode, but this means you can't use it from inside classes
Because the declaration disappears when the class scope is exited and the counter will be reused?
Yes. Incidently, it could be used for registering types since the type registration macros are invoked in the global namespace. I think that's why it was posted in the first place.