Perhaps my spelling class template could be folded into type_traits?
[code snipped]
Looks interesting, but I'm not sure if it's such a huge advantage over:
template <typename T> void foo(T) { cout << "T is " << typeid(T).name() << endl; }
The resulting string of your method is more portable of course, but is that the only reason?
No. There are other reasons why typeid() is not as "good" as my proposal:
1) You must #include <typeinfo> in order to use typeid(). This seems to me to be unnecessary overhead.
But wouldn't your method need an #include "spelling.hpp"?
2) The following program:>
class base { };
class derived : public base { };
int main(void) { base * b = new derived;
base const * const b2 = new derived;
foo(b); foo(*b); foo(b2); foo(*b2);
return 0; }
produces:
T is P4base T is 4base T is PC4base T is 4base
when compiled by g++ and executed in cygwin.
As you point out, the string returned by typeid().name() is not specified by the Standard, so it is not portable, but in this case, it is extremely difficult to decipher.
Ouch. That looks horrible indeed.
I believe a "standardized" (within Boost), portable, and *readable* text representation of T makes my proposal better than typeid().
At what cost? The strings you generate are indeed very readable, but specializing spelling for every type that might be a template parameter someday seems like too much of a burden to me.
Others might disagree though...
Dirk Gerrits
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost