The old familiar one:
typedef int cute_int; //cute : common and familiar syntax.
This syntax is perfect. No problem.
Now, when we can write typedefs like above, then what is the point of allowing this syntax:
int typedef crazy_int; //crazy : uncommon and unfamiliar syntax.
Just to confuse programmers? Is this syntax even needed anywhere (when in fact we've the previous one)? What do you think from the compilers' point of view? Do they find it cute or crazy? Or it doesn't matter to the compilers at all?
By the way, this code came from here : Use of typename keyword with typedef and new
In case if you're wondering if that is syntax error, then check out the working code here at ideone.
"The flip side of this is that you have to deal with old mistakes and with compatibility problems. For example, I consider the C declarator syntax an experiment that failed. Nevertheless, I adopted it for C++. The alternatives and improvements I considered at the time would not have improved matters. I rate is as a minor problem. The more serious problem is to maintain closeness of language definitions as C evolves." - Bjarne Stroustrup
The question is "why it confuses you?"
The syntax comes from the grammar of declaration specifiers in C++, which is very general, and used for many things in C++. The order of declaration specifiers doesn't matter. Look at these:
int virtual f() const, *g(int);
int ptr1, *ptr2;
int typedef const *name1, name2;
These are equivalent to:
virtual int f() const;
virtual int* g(int);
int ptr1;
int *ptr2;
typedef const int* name1;
typedef const int name2;
If you look at them long enough you can find that the syntax is actually uniform and logical. Also reading the grammar of C++ may help.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With