Constructors do not have names. In a declaration of a constructor, the declarator is a function declarator (8.3.5) of the form ptr-declarator ( parameter-declaration-clause ) exception-specificationopt attribute-specifier-seqopt where the ptr-declarator consists solely of an id-expression, an optional attribute-specifier-seq, and optional surrounding parentheses, and the id-expression has one of the following forms: ...
And yes, this compiles:
struct S{
(S)() {}
};
But why is this allowed?