Files
cppdraft_translate/cppdraft/class/local.md
2025-10-25 03:02:53 +03:00

2.2 KiB

[class.local]

11 Classes [class]

11.6 Local class declarations [class.local]

1

#

A class can be declared within a function definition; such a class is called a local class.

[Note 1:

A declaration in a local class cannot odr-use ([basic.def.odr]) a local entity from an enclosing scope.

— end note]

[Example 1: int x;void f() {static int s; int x; const int N = 5; extern int q(); int arr[2]; auto [y, z] = arr; struct local {int g() { return x; } // error: odr-use of non-odr-usable variable xint h() { return s; } // OKint k() { return ::x; } // OKint l() { return q(); } // OKint m() { return N; } // OK, not an odr-useint* n() { return &N; } // error: odr-use of non-odr-usable variable Nint p() { return y; } // error: odr-use of non-odr-usable structured binding y};} local* p = 0; // error: local not found — end example]

2

#

An enclosing function has no special access to members of the local class; it obeys the usual access rules ([class.access]).

Member functions of a local class shall be defined within their class definition, if they are defined at all.

3

#

A class nested within a local class is a local class.

A member of a local class X shall be declared only in the definition of X or, if the member is a nested class, in the nearest enclosing block scope of X.

4

#

[Note 2:

A local class cannot have static data members ([class.static.data]).

— end note]