Is there a particularly good reason to choose to use an elaborated type specifier? For example, in certain circumstances, one is required to use the template or
An example that might come up is when you have the type and also a non-type element of the same name. By using the elaborated type specifier you can explicitly request the type:
struct foo {};
void foo(struct foo) {}
int main() {
struct foo f;
foo(f);
}
Without the elaborated type specifier, foo in main refers to void foo(struct foo), not to the type struct foo. Now, I would not like that to be in production code, but you only asked for an example where it matters. The same can happen if the type and the function (or variable) are defined in different namespaces where the non-type is found earlier by lookup. You can replace struct with enum above.