Perché le qualifiche dell’ambito ridondanti sono supportate dal compilatore ed è legale?

Ho provato su due compilatori e sono rimasto sorpreso nel vedere entrambi supportano la seguente definizione senza lamentarsi:

class A { A(); }; A::A::A() {} ^^^ 

Si noti che questo ha esito positivo anche per i metodi, sebbene sia contrassegnato quando la dichiarazione è sovraqualificata.

Domande:

  • È un programma C ++ valido?
  • In tal caso, quale scopo serve – o è semplicemente un sottoprodotto?

Dettaglio aggiornato:

Nel caso in cui la domanda originale non fosse chiara o troppo breve: sono curioso del fatto che le qualifiche ridondanti siano consentite nella definizione (enfasi aggiunta anche sopra).


Clang di Apple GCC 4.2 + LLVM erano i compilatori

    Sì, è consentito (§9 / 2):

    Il nome della class viene anche inserito nell’ambito della class stessa; questo è noto come nome della class iniettata. Ai fini del controllo dell’accesso, il nome della class immessa viene trattato come se fosse un nome membro pubblico.

    Per informazioni sul ragionamento che porta al nome della class, si consiglia di leggere N0444 .