Kann eine funktionslokale Klasse im globalen Bereich definiert werden?C++

Programme in C++. Entwicklerforum
Anonymous
 Kann eine funktionslokale Klasse im globalen Bereich definiert werden?

Post by Anonymous »

Jede C++-Klasse kann zunächst vorwärts deklariert und erst später im Programm definiert werden. Sind funktionslokale Klassen eine Ausnahme von dieser Regel?
Bitte ziehen Sie ein vereinfachtes Programm in Betracht:

Code: Select all

auto f() {
struct A { struct B; };
return A{};
}

using A = decltype( f() );

struct A::B {};
wobei struct A::B nur innerhalb von f() deklariert, aber am Ende des Programms im globalen Bereich definiert wird.
EDG sagt, dass dies nicht zulässig ist:

Fehler: Klasse „A::B“ kann im aktuellen Bereich nicht definiert werden

GCC stürzt mit internem Compilerfehler ab, aber beides Clang und MSVC akzeptieren das Programm problemlos. Online-Demo: https://gcc.godbolt.org/z/Ksjhc6vva
Welche Implementierung ist hier richtig?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post