Consider the following excerpt from the safe bool idiom:
typedef void (Testable::*bool_type)() const;
operator bool_type() const;
Is it possibl
Answering the "Are there cases where a typedef is absolutely necessary?" from the question title, here is one example of where a typedef is needed:
f(unsigned char()); // compiler error!
typedef unsigned char Byte;
f(Byte()); // fine!
See the results here: http://ideone.com/JPUra
Ah, I just remembered the identity
meta-function. It is possible to write
operator typename identity<void (Testable::*)() const>::type() const;
with the following definition of identity
:
template <typename T>
struct identity
{
typedef T type;
};
You could argue that identity
still uses a typedef
, but this solution is "good" enough for me.