Consider this snippet of code. What does it do?
This is obviously disallowed, because a type must be parenthised in a sizeof expression. If this wasn't so, however, the code above would be ambiguous. It could be interpreted asCode:std::cout << sizeof int * * v << '\n';
(sizeof int *) * v, i.e. take the size of a pointer to int and multiply it with the value of v or
(sizeof int) * (*v), i.e. take the size of an int and multiply it with the dereferenced value of v.
If v is an object with appropriate overloaded operators, both might even be valid code.
