Keyword struct before constructor name
c++, visual-c++
Solution
In most contexts, you can use the elaborated type specifier `struct foo`, or equivalently `class foo`, instead of just the class name `foo`. This can be useful to resolve ambiguities:
struct foo {}; // Declares a type
foo foo; // Declares a variable with the same name
foo bar; // Error: "foo" refers to the variable
struct foo bar; // OK: "foo" explicitly refers to the class type
However, you can't use this form when declaring a constructor, so your compiler is wrong to accept that code. The specification for a constructor declaration (in C++11 12.1/1) only allows the class name itself, not an elaborated type specifier.
In general, you shouldn't be surprised when Visual C++ compiles all kinds of wonky code. It's notorious for its non-standard extensions to the language.
Problem
I was amazed when I saw that this code success compiled with MS Visual C++. ``` struct foo { struct foo(int i): value(i) {} int value; }; ``` What means keyword `struct` in such strange context?