I was under the impression that with Windows DLLs it's still an issue, in that the comparisons can only reliably be done on the name and not the address of what is returned by typeid(X). I'd consider this a problem, especially if you're using it somewhere that performance matters.
That's exactly how they implement it, but it's not a problem at all. Performance doesn't matter unless you can prove it does. And if a program spends significant amount of time doing RTTI, it's very likely that the performance is the least concern, because the first thing code should get then is some serious refactoring, not a microoptimization.
they just need to find a way to propagate exceptions across DLLs...
Again, we're not in the nineties anymore. Exceptions fly across DLLs just fine (but see the caveat in my previous post).
Especially on an embedded system that could really make a difference.
On an embedded system, you probably wouldn't use RTTI at all, because there you wouldn't run into a problem that
requires (as opposed to "allows, but there are alternatives that work as well") the use RTTI.
Oh, and on some embedded systems, one byte per class is still quite a lot of memory
Usually if you return a pointer, then in my opinion it should be expected to do some pointer things to that pointer.
[...]
The Windows API hides this via a typedef (such as HANDLE)
Handles happen to be represented as pointers, so... how many times did you try to make something pointerish with a handle?
It's not a problem on any compiler I know of, as one of the requirements of std::size_t is that it is large enough to hold the value of a pointer
No, that's a requirement of std::(u)intptr_t. std::size_t is required only to be able to store the size of any object. Because of that, on some systems, mainly those with segmented memory, size_t can be much smaller than a pointer.
And yes, such systems still exist. They're rare nowadays, but they can be found sometimes somewhere in the embedded world nonetheless. Remember that it's you who started talking about embedded platforms
casting a pointer to an integer is one of the main uses of reinterpret_cast.
Yes, but this doesn't invalidate the fact that it's still left implementation-defined by the standard.