Files
2025-10-25 03:02:53 +03:00

57 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[class.local]
# 11 Classes [[class]](./#class)
## 11.6 Local class declarations [class.local]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L3443)
A class can be declared within a function definition; such a class is
called a [*local class*](#def:class,local "11.6Local class declarations[class.local]")[.](#1.sentence-1)
[*Note [1](#note-1)*:
A declaration in a local class
cannot odr-use ([[basic.def.odr]](basic.def.odr#term.odr.use "6.3One-definition rule"))
a local entity
from an
enclosing scope[.](#1.sentence-2)
— *end note*]
[*Example [1](#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](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L3479)
An enclosing function has no special access to members of the local
class; it obeys the usual access rules ([[class.access]](class.access "11.8Member access control"))[.](#2.sentence-1)
Member functions of a local class shall be defined within their class
definition, if they are defined at all[.](#2.sentence-2)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L3486)
A class nested within
a local class is a local class[.](#3.sentence-1)
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[.](#3.sentence-2)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L3496)
[*Note [2](#note-2)*:
A local class cannot have static data members ([[class.static.data]](class.static.data "11.4.9.3Static data members"))[.](#4.sentence-1)
— *end note*]