Sergey Vojtovich <svoj@mariadb.org> writes:
+#ifdef __cplusplus +template <typename T, int S> class Atomic_type_triat; + + +template <typename T> class Atomic_type_triat<T, 4>
+template <typename T> class Atomic_type_triat<T, 8>
+template <typename T, typename S= Atomic_type_triat<T, sizeof(T)> > class Atomic
+ T operator++() { return add(1) + 1; }
[lots and lots of more template code snipped] I am vetoing this. We really, _really_ do not want to package up the atomic stuff in even more abstractions and API layers than we already have. Atomics and lock-free stuff is in itself plenty complicated. It is crucial that one can at least see easily in the code what is going on, without also having to spend effort to understand multiple layers of wrapping. As far as I can see, the only thing the templates do is hide stuff (like the data type used and the wrapping in locks on platforms without atomic support?), while what we need is to make those details clear to people reading the code, not to hide them! - Kristian.