Namespaces
Variants

Reflection library (since C++26)

From cppreference.com
< cpp | meta

The facilities defined in this section support reflective programming, allowing C++ programs to both observe the structure of the program itself and to generate code that depends on those observations.

Core language

The reflection library works in conjunction with two core language features:

Reflection library

Template:cpp/meta/dsc operator ofTemplate:cpp/meta/dsc symbol ofTemplate:cpp/meta/dsc u8symbol ofTemplate:cpp/meta/dsc has identifierTemplate:cpp/meta/dsc identifier ofTemplate:cpp/meta/dsc u8identifier ofTemplate:cpp/meta/dsc display string ofTemplate:cpp/meta/dsc u8display string ofTemplate:cpp/meta/dsc source location ofTemplate:cpp/meta/dsc type ofTemplate:cpp/meta/dsc object ofTemplate:cpp/meta/dsc constant ofTemplate:cpp/meta/dsc is publicTemplate:cpp/meta/dsc is privateTemplate:cpp/meta/dsc is virtualTemplate:cpp/meta/dsc is pure virtualTemplate:cpp/meta/dsc is overrideTemplate:cpp/meta/dsc is finalTemplate:cpp/meta/dsc is deletedTemplate:cpp/meta/dsc is defaultedTemplate:cpp/meta/dsc is user providedTemplate:cpp/meta/dsc is user declaredTemplate:cpp/meta/dsc is explicitTemplate:cpp/meta/dsc is noexceptTemplate:cpp/meta/dsc is bit fieldTemplate:cpp/meta/dsc is enumeratorTemplate:cpp/meta/dsc is annotationTemplate:cpp/meta/dsc is constTemplate:cpp/meta/dsc is volatileTemplate:cpp/meta/dsc is mutable memberTemplate:cpp/meta/dsc is lvalue reference qualifiedTemplate:cpp/meta/dsc is rvalue reference qualifiedTemplate:cpp/meta/dsc has static storage durationTemplate:cpp/meta/dsc has thread storage durationTemplate:cpp/meta/dsc has automatic storage durationTemplate:cpp/meta/dsc has internal linkageTemplate:cpp/meta/dsc has module linkageTemplate:cpp/meta/dsc has external linkageTemplate:cpp/meta/dsc has c language linkageTemplate:cpp/meta/dsc has linkageTemplate:cpp/meta/dsc is enumerable typeTemplate:cpp/meta/dsc is conversion functionTemplate:cpp/meta/dsc is operator functionTemplate:cpp/meta/dsc is literal operatorTemplate:cpp/meta/dsc is special member functionTemplate:cpp/meta/dsc is constructorTemplate:cpp/meta/dsc is default constructorTemplate:cpp/meta/dsc is copy constructorTemplate:cpp/meta/dsc is move constructorTemplate:cpp/meta/dsc is assignmentTemplate:cpp/meta/dsc is copy assignmentTemplate:cpp/meta/dsc is move assignmentTemplate:cpp/meta/dsc is destructorTemplate:cpp/meta/dsc is explicit object parameterTemplate:cpp/meta/dsc has default argumentTemplate:cpp/meta/dsc is vararg functionTemplate:cpp/meta/dsc is templateTemplate:cpp/meta/dsc is function templateTemplate:cpp/meta/dsc is variable templateTemplate:cpp/meta/dsc is class templateTemplate:cpp/meta/dsc is alias templateTemplate:cpp/meta/dsc is conversion function templateTemplate:cpp/meta/dsc is operator function templateTemplate:cpp/meta/dsc is literal operator templateTemplate:cpp/meta/dsc is constructor templateTemplate:cpp/meta/dsc is conceptTemplate:cpp/meta/dsc is valueTemplate:cpp/meta/dsc is objectTemplate:cpp/meta/dsc is structured bindingTemplate:cpp/meta/dsc is class memberTemplate:cpp/meta/dsc is namespace memberTemplate:cpp/meta/dsc is nonstatic data memberTemplate:cpp/meta/dsc is static memberTemplate:cpp/meta/dsc is baseTemplate:cpp/meta/dsc has default member initializerTemplate:cpp/meta/dsc has parentTemplate:cpp/meta/dsc parent ofTemplate:cpp/meta/dsc dealiasTemplate:cpp/meta/dsc has template argumentsTemplate:cpp/meta/dsc template ofTemplate:cpp/meta/dsc template arguments ofTemplate:cpp/meta/dsc parameters ofTemplate:cpp/meta/dsc variable ofTemplate:cpp/meta/dsc return type ofTemplate:cpp/meta/dsc is accessibleTemplate:cpp/meta/dsc has inaccessible nonstatic data membersTemplate:cpp/meta/dsc has inaccessible basesTemplate:cpp/meta/dsc has inaccessible subobjectsTemplate:cpp/meta/dsc current functionTemplate:cpp/meta/dsc current classTemplate:cpp/meta/dsc current namespaceTemplate:cpp/meta/dsc members ofTemplate:cpp/meta/dsc bases ofTemplate:cpp/meta/dsc static data members ofTemplate:cpp/meta/dsc nonstatic data members ofTemplate:cpp/meta/dsc subobjects ofTemplate:cpp/meta/dsc enumerators ofTemplate:cpp/meta/dsc member offsetTemplate:cpp/meta/dsc offset ofTemplate:cpp/meta/dsc size ofTemplate:cpp/meta/dsc alignment ofTemplate:cpp/meta/dsc bit size ofTemplate:cpp/meta/dsc annotations ofTemplate:cpp/meta/dsc annotations of with typeTemplate:cpp/meta/dsc extractTemplate:cpp/meta/dsc data member optionsTemplate:cpp/meta/dsc data member specTemplate:cpp/meta/dsc is data member specTemplate:cpp/meta/dsc define aggregateTemplate:cpp/meta/dsc is void typeTemplate:cpp/meta/dsc is null pointer typeTemplate:cpp/meta/dsc is integral typeTemplate:cpp/meta/dsc is floating point typeTemplate:cpp/meta/dsc is array typeTemplate:cpp/meta/dsc is pointer typeTemplate:cpp/meta/dsc is lvalue reference typeTemplate:cpp/meta/dsc is rvalue reference typeTemplate:cpp/meta/dsc is member object pointer typeTemplate:cpp/meta/dsc is member function pointer typeTemplate:cpp/meta/dsc is enum typeTemplate:cpp/meta/dsc is union typeTemplate:cpp/meta/dsc is class typeTemplate:cpp/meta/dsc is function typeTemplate:cpp/meta/dsc is reflection typeTemplate:cpp/meta/dsc is reference typeTemplate:cpp/meta/dsc is arithmetic typeTemplate:cpp/meta/dsc is fundamental typeTemplate:cpp/meta/dsc is object typeTemplate:cpp/meta/dsc is scalar typeTemplate:cpp/meta/dsc is compound typeTemplate:cpp/meta/dsc is member pointer typeTemplate:cpp/meta/dsc is const typeTemplate:cpp/meta/dsc is volatile typeTemplate:cpp/meta/dsc is trivially copyable typeTemplate:cpp/meta/dsc is standard layout typeTemplate:cpp/meta/dsc is empty typeTemplate:cpp/meta/dsc is polymorphic typeTemplate:cpp/meta/dsc is abstract typeTemplate:cpp/meta/dsc is final typeTemplate:cpp/meta/dsc is aggregate typeTemplate:cpp/meta/dsc is structural typeTemplate:cpp/meta/dsc is signed typeTemplate:cpp/meta/dsc is unsigned typeTemplate:cpp/meta/dsc is bounded array typeTemplate:cpp/meta/dsc is unbounded array typeTemplate:cpp/meta/dsc is scoped enum typeTemplate:cpp/meta/dsc is constructible typeTemplate:cpp/meta/dsc is default constructible typeTemplate:cpp/meta/dsc is copy constructible typeTemplate:cpp/meta/dsc is move constructible typeTemplate:cpp/meta/dsc is assignable typeTemplate:cpp/meta/dsc is copy assignable typeTemplate:cpp/meta/dsc is move assignable typeTemplate:cpp/meta/dsc is swappable with typeTemplate:cpp/meta/dsc is swappable typeTemplate:cpp/meta/dsc is destructible typeTemplate:cpp/meta/dsc is trivially constructible typeTemplate:cpp/meta/dsc is trivially default constructible typeTemplate:cpp/meta/dsc is trivially copy constructible typeTemplate:cpp/meta/dsc is trivially move constructible typeTemplate:cpp/meta/dsc is trivially assignable typeTemplate:cpp/meta/dsc is trivially copy assignable typeTemplate:cpp/meta/dsc is trivially move assignable typeTemplate:cpp/meta/dsc is trivially destructible typeTemplate:cpp/meta/dsc is nothrow constructible typeTemplate:cpp/meta/dsc is nothrow default constructible typeTemplate:cpp/meta/dsc is nothrow copy constructible typeTemplate:cpp/meta/dsc is nothrow move constructible typeTemplate:cpp/meta/dsc is nothrow assignable typeTemplate:cpp/meta/dsc is nothrow copy assignable typeTemplate:cpp/meta/dsc is nothrow move assignable typeTemplate:cpp/meta/dsc is nothrow swappable with typeTemplate:cpp/meta/dsc is nothrow swappable typeTemplate:cpp/meta/dsc is nothrow destructible typeTemplate:cpp/meta/dsc is implicit lifetime typeTemplate:cpp/meta/dsc has virtual destructorTemplate:cpp/meta/dsc has unique object representationsTemplate:cpp/meta/dsc reference constructs from temporaryTemplate:cpp/meta/dsc reference converts from temporaryTemplate:cpp/meta/dsc rankTemplate:cpp/meta/dsc extentTemplate:cpp/meta/dsc is same typeTemplate:cpp/meta/dsc is base of typeTemplate:cpp/meta/dsc is virtual base of typeTemplate:cpp/meta/dsc is convertible typeTemplate:cpp/meta/dsc is nothrow convertible typeTemplate:cpp/meta/dsc is layout compatible typeTemplate:cpp/meta/dsc is pointer interconvertible base of typeTemplate:cpp/meta/dsc is invocable typeTemplate:cpp/meta/dsc is invocable r typeTemplate:cpp/meta/dsc is nothrow invocable typeTemplate:cpp/meta/dsc is nothrow invocable r typeTemplate:cpp/meta/dsc remove constTemplate:cpp/meta/dsc remove volatileTemplate:cpp/meta/dsc remove cvTemplate:cpp/meta/dsc add constTemplate:cpp/meta/dsc add volatileTemplate:cpp/meta/dsc add cvTemplate:cpp/meta/dsc remove referenceTemplate:cpp/meta/dsc add lvalue referenceTemplate:cpp/meta/dsc add rvalue referenceTemplate:cpp/meta/dsc make signedTemplate:cpp/meta/dsc make unsignedTemplate:cpp/meta/dsc remove extentTemplate:cpp/meta/dsc remove all extentsTemplate:cpp/meta/dsc remove pointerTemplate:cpp/meta/dsc add pointerTemplate:cpp/meta/dsc remove cvrefTemplate:cpp/meta/dsc decayTemplate:cpp/meta/dsc common typeTemplate:cpp/meta/dsc common referenceTemplate:cpp/meta/dsc underlying typeTemplate:cpp/meta/dsc invoke resultTemplate:cpp/meta/dsc unwrap referenceTemplate:cpp/meta/dsc unwrap ref decayTemplate:cpp/meta/dsc tuple sizeTemplate:cpp/meta/dsc tuple elementTemplate:cpp/meta/dsc is applicable typeTemplate:cpp/meta/dsc is nothrow applicable typeTemplate:cpp/meta/dsc apply resultTemplate:cpp/meta/dsc variant sizeTemplate:cpp/meta/dsc variant alternativeTemplate:cpp/meta/dsc type orderTemplate:cpp/meta/dsc is string literal
Defined in header <meta>
(C++26)
the type of reflection values
(typedef) [edit]
exception thrown by reflection functions
(class) [edit]
promoting compile-time storage into static storage
promotes a compile-time string to static storage, returning a reflection representing the static string
(function template) [edit]
promotes compile-time array into static storage, returning a reflection representing the static array
(function template) [edit]
promotes compile-time string to static storage, returning a pointer to the first character of the static string
(function template) [edit]
promotes compile-time array into static storage, returning a span of the static array
(function template) [edit]
promotes compile-time value into static storage, returning a pointer to the static object
(function template) [edit]
operator representations
(C++26)
identifies overloadable operators
(enum) [edit]
reflection names and locations
reflection queries
checks if reflection is a complete type
(function) [edit]
checks if reflection is a variable
(function) [edit]
(C++26)
checks if reflection is a type
(function) [edit]
checks if reflection is a namespace
(function) [edit]
checks if reflection is a type alias
(function) [edit]
checks if reflection is a namespace alias
(function) [edit]
checks if reflection is a function
(function) [edit]
checks if reflection is a function parameter
(function) [edit]
accessibility queries
represents a context for access checking
(class) [edit]
accessibility scope identification
reflection member queries
reflection layout queries
annotation reflection
value extraction
reflection substitution
specifies a range of reflection values
(concept) [edit]
checks whether the given arguments can be substituted in the given template
(function template) [edit]
substitutes the given arguments in the given template, and returns a reflection of the result of substitution
(function template) [edit]
expression result reflection
returns a reflection representing a value or template parameter object, suitable for use as a constant template argument
(function template) [edit]
returns a reflection representing an object, suitable for use as a constant template argument
(function template) [edit]
returns a reflection representing a function, suitable for use as a constant template argument
(function template) [edit]
class definition generation
primary type categories
composite type categories
type properties
type property queries
type relations
const-volatile modifications
reference modifications
sign modifications
array modifications
pointer modifications
other transformations
checking string literals