
on Fri Jul 27 2012, Hossein Haeri
Whilst, with my particular situation explained above, I only read the Boost list to keep up with the news, your post stroke me for a particular reason: Type Erasure has a specific meaning in the Java world that has several times bit me hard over my Scala development. (See my threads on the topic to see that I publicly announce that I believe "type erasure is by far the ugliest dwarf I have ever witnessed mankind creating in a programming language."
Having said that, I opened your post thinking what a mistake it would be to bring nasty Java stuff to C++. To my big surprise, though, your stuff is nowhere close to what I understand is known in the JVM world as Type Erasure. So, I strongly recommend, as my first comment, to think about renaming the library because...
The Boost.TypeErasure library solves these problems allowing us to mirror static generic programming at runtime.
... rather than this, JVM Type Erasure is about knowingly choosing to be completely oblivious against types from the early compilation stages onwards. Whereas your stuff simply postpones certain typing decisions. For that reason, you might for example want to call your library "Staged Typing" or "Deferred Typing". (Both of these are established research topics in programming languages. Please note that you're not doing "Gentle Typing" or "Gradual Typing".)
On the other hand, JVM type erasure doesn't solve any of the problems your stuff does. As a matter of fact, in many occasions, it even makes the situation worse. For similar facilities to that of yours, your might want to take a look into the Scala Macro system.
Actually, from my understanding of Java type erasure, it's doing exactly the same things. IIUC the idea is to implement a generic function with a single piece of compiled code by erasing specifics of the type being operated on inside the implementation of that function. The problems IIUC with Java are twofold: 1. Type erasure is Java's only answer for genericity, which is bad for performance. 2. Java does all its type erasure one object at a time, which leads to the dreaded binary method problem. Steven's library supports something a lot more like Haskell's implementation of generics. -- Dave Abrahams BoostPro Computing Software Development Training http://www.boostpro.com Clang/LLVM/EDG Compilers C++ Boost