[#]
= Global namespace
:mrdocs:

== Namespaces

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs[`mrdocs`] 
| Core MrDocs support utilities&period;
|===

== link:#mrdocs[mrdocs] namespace

Core MrDocs support utilities&period;

=== Namespaces

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc[`doc`] 
| Doc&hyphen;comment enums and helpers that describe admonition kinds&period;
| link:#mrdocs-dom[`dom`] 
| Objects representing JSON&hyphen;like values&period;
| link:#mrdocs-files[`files`] 
| Filesystem helpers (join, temp, canonicalize) used throughout MrDocs&period;
| link:#mrdocs-helpers[`helpers`] 
| Handlebars helper registry for templates&period;
| link:#mrdocs-js[`js`] 
| JavaScript interop helpers for the embedded runtime&period;
| link:#mrdocs-lua[`lua`] 
| Lua interop helpers for the optional scripting&sol;backend integration&period;
| link:#mrdocs-report[`report`] 
| Reporting utilities (messages, statistics, sinks)&period;
|===

=== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-AnyFileVisitor[`AnyFileVisitor`] 
| Polymorphic visitor for files discovered during traversal&period;
| link:#mrdocs-ArrayType[`ArrayType`] 
| C&plus;&plus; array type (bounded or unbounded)&period;
| link:#mrdocs-ArrayView-06[`ArrayView`] 
| A non&hyphen;owning, read&hyphen;only view over a contiguous array of T&period;
| link:#mrdocs-AutoType[`AutoType`] 
| Represents `auto` or `decltype(auto)` placeholder type&period;
| link:#mrdocs-BadExpectedAccess-05[`BadExpectedAccess`] 
| Base class for accessing an empty Expected&period;
| link:#mrdocs-BadExpectedAccess-0f[`BadExpectedAccess&lt;void&gt;`] 
| Exception thrown when reading the value of an empty Expected&period;
| link:#mrdocs-BaseInfo[`BaseInfo`] 
| Metadata for a direct base&period;
| link:#mrdocs-ConceptSymbol[`ConceptSymbol`] 
| Info for concepts&period;
| link:#mrdocs-Config[`Config`] 
| Configuration used to generate the Corpus and Docs
| link:#mrdocs-ConstantExprInfo[`ConstantExprInfo`] 
| Represents an expression with a (possibly known) value
| link:#mrdocs-ConstantTArg[`ConstantTArg`] 
| Non&hyphen;type template argument&period;
| link:#mrdocs-ConstantTParam[`ConstantTParam`] 
| A constant template parameter
| link:#mrdocs-Corpus[`Corpus`] 
| The collection of declarations in extracted form&period;
| link:#mrdocs-DecltypeType[`DecltypeType`] 
| `decltype(expr)` type wrapper&period;
| link:#mrdocs-DocComment[`DocComment`] 
| A processed documentation comment attached to a declaration&period;
| link:#mrdocs-DomCorpus[`DomCorpus`] 
| Front&hyphen;end factory for producing Dom nodes&period;
| link:#mrdocs-EnumConstantSymbol[`EnumConstantSymbol`] 
| Info for enum constants&period;
| link:#mrdocs-EnumSymbol[`EnumSymbol`] 
| Metadata for an enumeration declaration&period;
| link:#mrdocs-Error[`Error`] 
| Holds the description of an error, or success&period;
| link:#mrdocs-Exception[`Exception`] 
| Type of all exceptions thrown by the API&period;
| link:#mrdocs-ExecutorGroup[`ExecutorGroup`] 
| A set of execution agents for performing concurrent work&period;
| link:#mrdocs-ExecutorGroupBase[`ExecutorGroupBase`] 
| Base class that owns a pool of execution agents and a shared work queue&period;
| link:#mrdocs-Expected-0a[`Expected`] 
| A container holding an error or a value&period;
| link:#mrdocs-Expected-0f[`Expected&lt;T, E&gt;`] 
| Expected specialization for `void` values&period; Holds either success (no payload) or an unexpected error `E`&period;
| link:#mrdocs-Expected-01[`Expected&lt;T&, E&gt;`] 
| Expected specialization for lvalue references&period; Holds either a bound reference to `T` or an unexpected error `E`&period;
| link:#mrdocs-ExplicitInfo[`ExplicitInfo`] 
| Stores only the operand of the explicit&hyphen;specifier or noexcept&hyphen;specifier as a string&period; The complete expression is not preserved at this time&period; This is a temporary design and may be improved in the future&period;
| link:#mrdocs-ExprInfo[`ExprInfo`] 
| Represents an expression
| link:#mrdocs-FormatString[`FormatString`] 
| A format string with source location&period;
| link:#mrdocs-FriendInfo[`FriendInfo`] 
| Info for friend declarations&period;
| link:#mrdocs-FunctionSymbol[`FunctionSymbol`] 
| Metadata for a function or method&period;
| link:#mrdocs-FunctionType[`FunctionType`] 
| Function type with parameters, qualifiers, and noexcept info&period;
| link:#mrdocs-Generator[`Generator`] 
| Base class for documentation generators&period;
| link:#mrdocs-GlobPattern[`GlobPattern`] 
| A glob pattern matcher
| link:#mrdocs-GuideSymbol[`GuideSymbol`] 
| Info for deduction guides&period;
| link:#mrdocs-Handlebars[`Handlebars`] 
| A handlebars environment
| link:#mrdocs-HandlebarsError[`HandlebarsError`] 
| An error thrown or returned by Handlebars
| link:#mrdocs-HandlebarsOptions[`HandlebarsOptions`] 
| Options for handlebars
| link:#mrdocs-IdentifierName[`IdentifierName`] 
| Represents an identifier
| link:#mrdocs-LValueReferenceType[`LValueReferenceType`] 
| An lvalue reference type&period;
| link:#mrdocs-Location[`Location`] 
| Source location of a symbol or entity&period;
| link:#mrdocs-MemberPointerType[`MemberPointerType`] 
| Pointer&hyphen;to&hyphen;member type (object or function)&period;
| link:#mrdocs-Name[`Name`] 
| Represents a name for a named `Type`
| link:#mrdocs-NamedType[`NamedType`] 
| A type identified by name (possibly fundamental)&period;
| link:#mrdocs-NamespaceAliasSymbol[`NamespaceAliasSymbol`] 
| Info for namespace aliases&period;
| link:#mrdocs-NamespaceSymbol[`NamespaceSymbol`] 
| Describes a namespace and its members&period;
| link:#mrdocs-NamespaceTranche[`NamespaceTranche`] 
| Buckets the members that appear inside a namespace&period;
| link:#mrdocs-NoexceptInfo[`NoexceptInfo`] 
| Captures a `noexcept` specification and its evaluated form&period;
| link:#mrdocs-Optional-03[`Optional`] 
| A compact optional that automatically uses nullable&lowbar;traits&lt;T&gt; when available&period;
| link:#mrdocs-Optional-02[`Optional&lt;T&&gt;`] 
| Optional reference wrapper that never owns storage&period;
| link:#mrdocs-OutputRef[`OutputRef`] 
| Reference to output stream used by handlebars
| link:#mrdocs-Overload-09[`Overload`] 
| Combines multiple callable types into a single overloaded function object&period;
| link:#mrdocs-OverloadsSymbol[`OverloadsSymbol`] 
| Represents a set of function overloads&period;
| link:#mrdocs-Param[`Param`] 
| Represents a single function parameter
| link:#mrdocs-ParseResult[`ParseResult`] 
| The result of a parse operation&period;
| link:#mrdocs-PathGlobPattern[`PathGlobPattern`] 
| A glob pattern matcher for paths
| link:#mrdocs-PointerType[`PointerType`] 
| Pointer type wrapper&period;
| link:#mrdocs-Polymorphic[`Polymorphic`] 
| A polymorphic value&hyphen;type&period;
| link:#mrdocs-RValueReferenceType[`RValueReferenceType`] 
| An rvalue reference type&period;
| link:#mrdocs-RangeFor-0f[`RangeFor`] 
| Range adapter to expose first&sol;last flags inside range&hyphen;for loops&period;
| link:#mrdocs-RecordInterface[`RecordInterface`] 
| The aggregated interface for a given struct, class, or union&period;
| link:#mrdocs-RecordSymbol[`RecordSymbol`] 
| Metadata for struct, class, or union&period;
| link:#mrdocs-RecordTranche[`RecordTranche`] 
| A group of members that have the same access specifier&period;
| link:#mrdocs-ReferenceDirectories[`ReferenceDirectories`] 
| Reference directories used to resolve paths
| link:#mrdocs-ScopeExit-0a[`ScopeExit`] 
| Execute a callable when the enclosing scope exits unless dismissed&period;
| link:#mrdocs-ScopeExitRestore-01[`ScopeExitRestore`] 
| RAII helper that restores a referenced value on scope exit&period;
| link:#mrdocs-SourceInfo[`SourceInfo`] 
| Stores source information for a declaration&period;
| link:#mrdocs-SourceLocation[`SourceLocation`] 
| A source location with filename prettification&period;
| link:#mrdocs-SpecializationName[`SpecializationName`] 
| Represents a (possibly qualified) symbol name with template arguments&period;
| link:#mrdocs-SplitLinesView[`SplitLinesView`] 
| A lazy input range of std&colon;&colon;string&lowbar;view lines split on all known line breaks&period;
| link:#mrdocs-StringHash[`StringHash`] 
| Transparent hash functor for string&hyphen;like keys&period;
| link:#mrdocs-Symbol[`Symbol`] 
| Base class with common properties of all symbols
| link:#mrdocs-SymbolCommonBase-015[`SymbolCommonBase`] 
| Base class for providing variant discriminator functions&period;
| link:#mrdocs-SymbolGlobPattern[`SymbolGlobPattern`] 
| A glob pattern matcher for C&plus;&plus; symbols
| link:#mrdocs-SymbolID[`SymbolID`] 
| A unique identifier for a symbol&period;
| link:#mrdocs-TArg[`TArg`] 
| Base class for any template argument&period;
| link:#mrdocs-TArgCommonBase-06[`TArgCommonBase`] 
| CRTP base that fixes the argument kind&period;
| link:#mrdocs-TParam[`TParam`] 
| Base class for a template parameter declaration&period;
| link:#mrdocs-TParamCommonBase-0c[`TParamCommonBase`] 
| CRTP base that fixes the parameter kind&period;
| link:#mrdocs-TaskGroup[`TaskGroup`] 
| A subset of possible work in a thread pool&period;
| link:#mrdocs-TemplateInfo[`TemplateInfo`] 
| Information about templates and specializations thereof&period;
| link:#mrdocs-TemplateTArg[`TemplateTArg`] 
| Template template argument&period;
| link:#mrdocs-TemplateTParam[`TemplateTParam`] 
| Template template parameter&period;
| link:#mrdocs-ThreadPool[`ThreadPool`] 
| A pool of threads for executing work concurrently&period;
| link:#mrdocs-Type[`Type`] 
| A possibly qualified type&period;
| link:#mrdocs-TypeCommonBase-0e[`TypeCommonBase`] 
| CRTP base that ties a concrete type to a fixed TypeKind&period;
| link:#mrdocs-TypeTArg[`TypeTArg`] 
| Type template argument&period;
| link:#mrdocs-TypeTParam[`TypeTParam`] 
| Type template parameter&period;
| link:#mrdocs-TypedefSymbol[`TypedefSymbol`] 
| Info for typedef and using declarations&period;
| link:#mrdocs-Unexpected-0c[`Unexpected`] 
| Holds an unexpected error value for Expected&period;
| link:#mrdocs-UsingSymbol[`UsingSymbol`] 
| Info for using declarations&period;
| link:#mrdocs-VariableSymbol[`VariableSymbol`] 
| A variable&period;
| link:#mrdocs-Visitor[`Visitor`] 
| A visitor for a type
| link:#mrdocs-YCombinator[`YCombinator`] 
| Enables recursive lambdas by passing a self&hyphen;reference as the first argument&period;
| link:#mrdocs-add_const_from[`add&lowbar;const&lowbar;from`] 
| Propagate const qualification from `From` to `To`, keeping references&period;
| link:#mrdocs-add_cv_from[`add&lowbar;cv&lowbar;from`] 
| Propagate both const and volatile qualifiers from `From` to `To`&period;
| link:#mrdocs-add_cvref_from[`add&lowbar;cvref&lowbar;from`] 
| Propagate cv&hyphen;qualification and reference category from `From` to `To`&period;
| link:#mrdocs-add_lvalue_reference_from[`add&lowbar;lvalue&lowbar;reference&lowbar;from`] 
| Propagate lvalue&hyphen;reference from `From` to `To` if present&period;
| link:#mrdocs-add_reference_from[`add&lowbar;reference&lowbar;from`] 
| Propagate reference qualification from `From` to `To`&period;
| link:#mrdocs-add_rvalue_reference_from[`add&lowbar;rvalue&lowbar;reference&lowbar;from`] 
| Propagate rvalue&hyphen;reference from `From` to `To` if present&period;
| link:#mrdocs-add_volatile_from[`add&lowbar;volatile&lowbar;from`] 
| Propagate volatile qualification from `From` to `To`, keeping references&period;
| link:#mrdocs-any_callable-01[`any&lowbar;callable`] 
| A movable, type&hyphen;erased function object&period;
| link:#mrdocs-any_callable-0a[`any&lowbar;callable&lt;R(Args&period;&period;&period;)&gt;`] 
| Type&hyphen;erased callable wrapper for signature `R(Args&period;&period;&period;)`&period;
| link:#mrdocs-make_dependent[`make&lowbar;dependent`] 
| Dependent alias of `T`, useful for delaying instantiation&period;
| link:#mrdocs-nullable_traits-0b[`nullable&lowbar;traits`] 
| nullable&lowbar;traits&lt;T&gt; defines how to treat a T as “nullable” without an external engaged bit&period;
| link:#mrdocs-nullable_traits-00[`nullable&lowbar;traits&lt;Location&gt;`] 
| nullable&lowbar;traits specialization for Location&period;
| link:#mrdocs-nullable_traits-06[`nullable&lowbar;traits&lt;T&gt;`] 
| nullable&lowbar;traits for types with a sentinel&period;
| link:#mrdocs-nullable_traits-0c[`nullable&lowbar;traits&lt;Polymorphic&lt;T&gt;&gt;`] 
| nullable&lowbar;traits for Polymorphic&lt;T&gt;&period;
| link:#mrdocs-sentinel_traits-0a[`sentinel&lowbar;traits`] 
| Defines a customization point for types that have an intrinsic sentinel value denoting “null”&period;
| link:#mrdocs-sentinel_traits-03a[`sentinel&lowbar;traits&lt;std::nullptr&lowbar;t&gt;`] 
| sentinel&lowbar;traits specialization for std&colon;&colon;nullptr&lowbar;t&period;
| link:#mrdocs-sentinel_traits-01[`sentinel&lowbar;traits&lt;T&gt;`] 
| sentinel&lowbar;traits specialization for unsigned integral types&period;
| link:#mrdocs-sentinel_traits-03c[`sentinel&lowbar;traits&lt;T*&gt;`] 
| sentinel&lowbar;traits specialization for raw pointers&period;
| link:#mrdocs-unexpect_t[`unexpect&lowbar;t`] 
| Tag type used to select unexpected construction&period;
| link:#mrdocs-unlock_guard[`unlock&lowbar;guard`] 
| A scoped guard which unlocks a mutex&period;
| link:#mrdocs-UnorderedStringMap[`UnorderedStringMap`] 
| unordered&lowbar;map keyed by std&colon;&colon;string with transparent hashing&period;
| link:#mrdocs-UnorderedStringMultiMap[`UnorderedStringMultiMap`] 
| unordered&lowbar;multimap keyed by std&colon;&colon;string with transparent hashing&period;
| link:#mrdocs-add_const_from_t[`add&lowbar;const&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;const&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_cv_from_t[`add&lowbar;cv&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;cv&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_cvref_from_t[`add&lowbar;cvref&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;cvref&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_lvalue_reference_from_t[`add&lowbar;lvalue&lowbar;reference&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;lvalue&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_reference_from_t[`add&lowbar;reference&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_rvalue_reference_from_t[`add&lowbar;rvalue&lowbar;reference&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;rvalue&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_volatile_from_t[`add&lowbar;volatile&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;volatile&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-make_dependent_t[`make&lowbar;dependent&lowbar;t`] 
| Alias for `make&lowbar;dependent&lt;T, U&gt;&colon;&colon;type`&period;
|===

=== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-AccessKind[`AccessKind`] 
| Access specifier&period;
| link:#mrdocs-AutoKind[`AutoKind`] 
| The kind of `auto` keyword used in a declaration&period;
| link:#mrdocs-ConstexprKind[`ConstexprKind`] 
| `constexpr`&sol;`consteval` specifier kinds
| link:#mrdocs-ExplicitKind[`ExplicitKind`] 
| Explicit specifier kinds
| link:#mrdocs-ExtractionMode[`ExtractionMode`] 
| Determine why a symbol is extracted
| link:#mrdocs-FileKind[`FileKind`] 
| Classifies where a file originates from&period;
| link:#mrdocs-FunctionClass[`FunctionClass`] 
| Function classifications
| link:#mrdocs-FundamentalTypeKind[`FundamentalTypeKind`] 
| Categorically describes a fundamental type&period;
| link:#mrdocs-ListKind[`ListKind`] 
| Classification of list ordering&period;
| link:#mrdocs-NameKind[`NameKind`] 
| Kinds of names that appear in type and symbol metadata&period;
| link:#mrdocs-NoexceptKind[`NoexceptKind`] 
| Exception specification kinds
| link:#mrdocs-OperatorKind[`OperatorKind`] 
| Operator kinds
| link:#mrdocs-QualifierKind[`QualifierKind`] 
| Type qualifiers
| link:#mrdocs-RecordKeyKind[`RecordKeyKind`] 
| The kind of record&colon; struct, class, or union&period;
| link:#mrdocs-ReferenceKind[`ReferenceKind`] 
| Reference type kinds
| link:#mrdocs-StorageClassKind[`StorageClassKind`] 
| Storage class kinds
| link:#mrdocs-SymbolKind[`SymbolKind`] 
| Info variant discriminator
| link:#mrdocs-TArgKind[`TArgKind`] 
| The kind of template argument&period;
| link:#mrdocs-TParamKeyKind[`TParamKeyKind`] 
| The keyword a template parameter was declared with
| link:#mrdocs-TParamKind[`TParamKind`] 
| Discriminates the different template parameter categories&period;
| link:#mrdocs-TableAlignmentKind[`TableAlignmentKind`] 
| Horizontal alignment for table columns&period;
| link:#mrdocs-TemplateSpecKind[`TemplateSpecKind`] 
| The kind of template or specialization&period;
| link:#mrdocs-TypeKind[`TypeKind`] 
| Variants of C&plus;&plus; types captured in metadata&period;
| link:#mrdocs-UsingClass[`UsingClass`] 
| The class of using declaration&period;
|===

=== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-CompareDerived-0f[`CompareDerived`] 
| Compares two polymorphic objects that have visit functions
| link:#mrdocs-HTMLEscape-0f[`HTMLEscape`] 
| `HTMLEscape` overloads
| link:#mrdocs-addMember[`addMember`] 
| Append a new function overload to the set&period;
| link:#mrdocs-addMetaObject[`addMetaObject`] 
| Add a $meta object with type information&period;
| link:#mrdocs-allMembers-0a[`allMembers`] 
| `allMembers` overloads
| link:#mrdocs-assert_failed[`assert&lowbar;failed`] 
| Handler invoked when `MRDOCS&lowbar;ASSERT` fails&period;
| link:#mrdocs-bottomUpTraverse[`bottomUpTraverse`] 
| Traverse a DocComment tree bottom&hyphen;up (post&hyphen;order)&period;
| link:#mrdocs-canMerge[`canMerge`] 
| Check whether two symbols may be merged&period;
| link:#mrdocs-cast-02[`cast`] 
| `cast` overloads
| link:#mrdocs-cast_or_null-0c[`cast&lowbar;or&lowbar;null`] 
| `cast&lowbar;or&lowbar;null` overloads
| link:#mrdocs-compareSymbolNames[`compareSymbolNames`] 
| Return the result of comparing s0 to s1&period;
| link:#mrdocs-contains-06[`contains`] 
| Determine if a range contains a specific element&period;
| link:#mrdocs-contains_any-00[`contains&lowbar;any`] 
| Determine if a range contains any of the specified elements&period;
| link:#mrdocs-contains_n[`contains&lowbar;n`] 
| Determine if a range contains at least N instances of the specified element&period;
| link:#mrdocs-contains_n_any-0e[`contains&lowbar;n&lowbar;any`] 
| Determine if a range contains at least N instances of any of the specified elements&period;
| link:#mrdocs-countSymbolKind[`countSymbolKind`] 
| Count the number of SymbolKind enumerators&period;
| link:#mrdocs-createFrame-01[`createFrame`] 
| Create child data objects&period;
| link:#mrdocs-dyn_cast-02[`dyn&lowbar;cast`] 
| `dyn&lowbar;cast` overloads
| link:#mrdocs-dyn_cast_or_null-0f[`dyn&lowbar;cast&lowbar;or&lowbar;null`] 
| `dyn&lowbar;cast&lowbar;or&lowbar;null` overloads
| link:#mrdocs-endsWithOneOf[`endsWithOneOf`] 
| Determine if a string ends with one of the specified characters
| link:#mrdocs-escapeExpression[`escapeExpression`] 
| 
| link:#mrdocs-findGenerator[`findGenerator`] 
| Find a generator by its id&period;
| link:#mrdocs-find_last_of[`find&lowbar;last&lowbar;of`] 
| Find the last element in a range that matches an element in the specified range&period;
| link:#mrdocs-forEachFile-08[`forEachFile`] 
| `forEachFile` overloads
| link:#mrdocs-formatError[`formatError`] 
| Return a formatted error&period;
| link:#mrdocs-fromString[`fromString`] 
| Convert a string to a FundamentalTypeKind&period;
| link:#mrdocs-getDefaultAccessString[`getDefaultAccessString`] 
| Return the default accessibility for a record key kind&period;
| link:#mrdocs-getOperatorKind[`getOperatorKind`] 
| Return the short name of an operator as a string&period;
| link:#mrdocs-getOperatorKindFromSuffix[`getOperatorKindFromSuffix`] 
| Return the short name of an operator as a string&period;
| link:#mrdocs-getOperatorName[`getOperatorName`] 
| Return the name of an operator as a string&period;
| link:#mrdocs-getOperatorReadableName[`getOperatorReadableName`] 
| Return the human&hyphen;readable name of the operator
| link:#mrdocs-getParents-0d[`getParents`] 
| `getParents` overloads
| link:#mrdocs-getPrimaryLocation-04[`getPrimaryLocation`] 
| `getPrimaryLocation` overloads
| link:#mrdocs-getSafeOperatorName[`getSafeOperatorName`] 
| Return the safe name of an operator as a string&period;
| link:#mrdocs-getShortOperatorName[`getShortOperatorName`] 
| Return the short name of an operator as a string&period;
| link:#mrdocs-getSinglePageFullPath[`getSinglePageFullPath`] 
| Return the full path for single page output&period;
| link:#mrdocs-innerType-00[`innerType`] 
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-06[`innerTypePtr`] 
| Return the inner type&period;
| link:#mrdocs-innermostType-06[`innermostType`] 
| `innermostType` overloads
| link:#mrdocs-installGenerator[`installGenerator`] 
| Install a custom generator&period;
| link:#mrdocs-isAlphaNumeric-05[`isAlphaNumeric`] 
| `isAlphaNumeric` overloads
| link:#mrdocs-isAlphabetic-05[`isAlphabetic`] 
| `isAlphabetic` overloads
| link:#mrdocs-isBinaryOperator[`isBinaryOperator`] 
| Determines whether the operator is potentially binary&period;
| link:#mrdocs-isCopyAssignment[`isCopyAssignment`] 
| Check whether a function is a copy assignment operator&period;
| link:#mrdocs-isCopyConstructor[`isCopyConstructor`] 
| Check whether a function is a copy constructor&period;
| link:#mrdocs-isDefaultConstructor[`isDefaultConstructor`] 
| Check whether a function is a default constructor&period;
| link:#mrdocs-isDigit-03[`isDigit`] 
| `isDigit` overloads
| link:#mrdocs-isEmpty[`isEmpty`] 
| Determine if a value is empty
| link:#mrdocs-isLowerCase-04[`isLowerCase`] 
| `isLowerCase` overloads
| link:#mrdocs-isMoveAssignment[`isMoveAssignment`] 
| Check whether a function is a move assignment operator&period;
| link:#mrdocs-isMoveConstructor[`isMoveConstructor`] 
| Check whether a function is a move constructor&period;
| link:#mrdocs-isSpecialMemberFunction[`isSpecialMemberFunction`] 
| Check whether a function is a special member function&period;
| link:#mrdocs-isUnaryOperator[`isUnaryOperator`] 
| Determines whether the operator is potentially unary&period;
| link:#mrdocs-isUpperCase-04[`isUpperCase`] 
| `isUpperCase` overloads
| link:#mrdocs-isWhitespace-09[`isWhitespace`] 
| `isWhitespace` overloads
| link:#mrdocs-is_null[`is&lowbar;null`] 
| is&lowbar;null helper that uses nullable&lowbar;traits&lt;T&gt; if available&period;
| link:#mrdocs-is_one_of-0e[`is&lowbar;one&lowbar;of`] 
| Determine if an element is equal to any of the elements in the specified range&period;
| link:#mrdocs-isa[`isa`] 
| Return true if the polymorphic object holds a value of type To&period;
| link:#mrdocs-isa_or_null[`isa&lowbar;or&lowbar;null`] 
| Return true if pointer is non&hyphen;null and referent is of type To&period;
| link:#mrdocs-leastSpecific[`leastSpecific`] 
| Compare ExtractionModes and returns the least specific
| link:#mrdocs-ltrim-051[`ltrim`] 
| `ltrim` overloads
| link:#mrdocs-makeChar[`makeChar`] 
| Apply the &quot;char&quot; specifier to the type
| link:#mrdocs-makeLong[`makeLong`] 
| Apply the &quot;long&quot; specifier to the type
| link:#mrdocs-makeOverload[`makeOverload`] 
| Factory function that creates an Overload from the given callables&period;
| link:#mrdocs-makeShort[`makeShort`] 
| Apply the &quot;short&quot; specifier to the type
| link:#mrdocs-makeSigned[`makeSigned`] 
| Apply the &quot;signed&quot; specifier to the type
| link:#mrdocs-makeUnsigned[`makeUnsigned`] 
| Apply the &quot;unsigned&quot; specifier to the type
| link:#mrdocs-makeVisitor[`makeVisitor`] 
| Make a visitor for a base type
| link:#mrdocs-make_array_view-0a[`make&lowbar;array&lowbar;view`] 
| `make&lowbar;array&lowbar;view` overloads
| link:#mrdocs-make_null[`make&lowbar;null`] 
| make&lowbar;null helper that uses nullable&lowbar;traits&lt;T&gt; if available&period;
| link:#mrdocs-mapReflectedType-0f[`mapReflectedType`] 
| `mapReflectedType` overloads
| link:#mrdocs-match[`match`] 
| Applies a set of callables to a std&colon;&colon;variant using std&colon;&colon;visit and Overload&period;
| link:#mrdocs-merge-0a[`merge`] 
| `merge` overloads
| link:#mrdocs-mostSpecific[`mostSpecific`] 
| Compare ExtractionModes and returns the most specific
| link:#mrdocs-null_of[`null&lowbar;of`] 
| null&lowbar;of helper that constructs a null T using nullable&lowbar;traits&lt;T&gt;&period;
| link:#mrdocs-operator_bitor[`operator&verbar;`] 
| Pipe a contiguous character range into the adaptor&period;
| link:#mrdocs-overrides[`overrides`] 
| Determine if one function would override the other
| link:#mrdocs-parse-07[`parse`] 
| Parse a string view
| link:#mrdocs-readableTypeName[`readableTypeName`] 
| Get the unqualified name of a type&period;
| link:#mrdocs-reindentCode[`reindentCode`] 
| Reindent code by removing the common leading spaces and adding the specified indent&period;
| link:#mrdocs-replace[`replace`] 
| Return the substring without leading and trailing horizontal whitespace&period;
| link:#mrdocs-rtrim-0c[`rtrim`] 
| `rtrim` overloads
| link:#mrdocs-safeString-0a[`safeString`] 
| `safeString` overloads
| link:#mrdocs-splitLines-04[`splitLines`] 
| `splitLines` overloads
| link:#mrdocs-startsWithOneOf[`startsWithOneOf`] 
| Determine if a string starts with one of the specified characters
| link:#mrdocs-swap-07d[`swap`] 
| `swap` overloads
| link:#mrdocs-tag_invoke-005[`tag&lowbar;invoke`] 
| `tag&lowbar;invoke` overloads
| link:#mrdocs-toBase16Str[`toBase16Str`] 
| Convert a SymbolID to a string
| link:#mrdocs-toCamelCase[`toCamelCase`] 
| Convert a string to `camelCase` using ASCII letter rules&period;
| link:#mrdocs-toKebabCase[`toKebabCase`] 
| Convert a string to `kebab&hyphen;case` using ASCII letter rules&period;
| link:#mrdocs-toLowerCase-0a6[`toLowerCase`] 
| `toLowerCase` overloads
| link:#mrdocs-toPascalCase[`toPascalCase`] 
| Convert a string to `PascalCase` using ASCII letter rules&period;
| link:#mrdocs-toSnakeCase[`toSnakeCase`] 
| Convert a string to `snake&lowbar;case` using ASCII letter rules&period;
| link:#mrdocs-toString-027[`toString`] 
| `toString` overloads
| link:#mrdocs-toUpperCase-0f[`toUpperCase`] 
| `toUpperCase` overloads
| link:#mrdocs-to_underlying[`to&lowbar;underlying`] 
| Return the value as its underlying type&period;
| link:#mrdocs-topDownTraverse[`topDownTraverse`] 
| Traverse a DocComment tree top&hyphen;down (pre&hyphen;order)&period;
| link:#mrdocs-trim-0a[`trim`] 
| `trim` overloads
| link:#mrdocs-visit-0f[`visit`] 
| `visit` overloads
| link:#mrdocs-visitIndexed[`visitIndexed`] 
| Visits a std&colon;&colon;variant and calls the combined callable with the active index and the value&period;
| link:#mrdocs-yCombinator[`yCombinator`] 
| Factory that creates a YCombinator from a callable&period;
| link:#mrdocs-operator_lshift-0e1[`operator&lt;&lt;`] 
| Write to output
| link:#mrdocs-operator_eq-04[`operator&equals;&equals;`] 
| Equality operators
| link:#mrdocs-operator_not_eq-0a[`operator!&equals;`] 
| Inequality operators
| link:#mrdocs-operator_lt-0f[`operator&lt;`] 
| Less&hyphen;than operators
| link:#mrdocs-operator_le-0b[`operator&lt;&equals;`] 
| Less&hyphen;than&hyphen;or&hyphen;equal operators
| link:#mrdocs-operator_gt-09[`operator&gt;`] 
| Greater&hyphen;than operators
| link:#mrdocs-operator_ge-00[`operator&gt;&equals;`] 
| Greater&hyphen;than&hyphen;or&hyphen;equal operators
| link:#mrdocs-operator_3way-00[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

=== Variables

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-unexpect[`unexpect`] 
| Tag object to request unexpected construction&period;
|===

=== Concepts

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ClearableContainerLike[`ClearableContainerLike`] 
| Internal concept that matches “empty&hyphen;clear default&hyphen;constructible” types&period;
| link:#mrdocs-DescribedComparable[`DescribedComparable`] 
| True if T has described members (for comparison)&period;
| link:#mrdocs-DocCommentNode[`DocCommentNode`] 
| Concept to check if a type represents a DocComment node&period;
| link:#mrdocs-DocCommentNodeTraversable[`DocCommentNodeTraversable`] 
| Types that can be traversed by DocComment helpers&period;
| link:#mrdocs-HasParse[`HasParse`] 
| Concept to determine if there&apos;s a parse function for a type&period;
| link:#mrdocs-HasSentinel[`HasSentinel`] 
| Concept that is satisfied when sentinel&lowbar;traits&lt;T&gt; declares a usable sentinel&period;
| link:#mrdocs-SymbolParent[`SymbolParent`] 
| A concept for types that have `Symbol` members&period;
| link:#mrdocs-dereferenceable[`dereferenceable`] 
| Determine if a type is dereferenceable
| link:#mrdocs-has_nullable_traits_v[`has&lowbar;nullable&lowbar;traits&lowbar;v`] 
| Utility concept that returns true if T has a nullable&lowbar;traits specialization enabled&period;
| link:#mrdocs-pair_like[`pair&lowbar;like`] 
| Concept to check if a type is pair&hyphen;like
| link:#mrdocs-polymorphic_storage_for[`polymorphic&lowbar;storage&lowbar;for`] 
| Concept to check if a type is representing a polymorphic storage
| link:#mrdocs-range_of[`range&lowbar;of`] 
| Concept to check if a type is a range of T
| link:#mrdocs-range_of_tuple_like[`range&lowbar;of&lowbar;tuple&lowbar;like`] 
| Concept to check if a range is a range of tuple&hyphen;like elements
| link:#mrdocs-tuple_like[`tuple&lowbar;like`] 
| Concept to check if a type is tuple&hyphen;like
|===

=== Deduction Guides

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ArrayView-0c[`ArrayView&lt;T&gt;`] 
| Deduce ArrayView element type from C&hyphen;style array&period;
| link:#mrdocs-ArrayView-01[`ArrayView&lt;T&gt;`] 
| Deduce ArrayView element type from pointer and count&period;
| link:#mrdocs-Overload-0a[`Overload&lt;Ts&period;&period;&period;&gt;`] 
| Class template argument deduction guide for Overload&period;
| link:#mrdocs-RangeFor-0c[`RangeFor&lt;Container&gt;`] 
| Deduction guide for RangeFor&period;
| link:#mrdocs-ScopeExit-0d[`ScopeExit&lt;F&gt;`] 
| Deduction guide for ScopeExit&period;
| link:#mrdocs-ScopeExitRestore-04[`ScopeExitRestore&lt;T&gt;`] 
| Deduction guide for ScopeExitRestore taking a reference&period;
| link:#mrdocs-ScopeExitRestore-03[`ScopeExitRestore&lt;T&gt;`] 
| Deduction guide for ScopeExitRestore taking a reference and new value&period;
| link:#mrdocs-Unexpected-0d[`Unexpected&lt;E&gt;`] 
| Deduction guide for Unexpected, forwarding the error type&period;
|===

=== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-reference_constructs_from_temporary_v[`reference&lowbar;constructs&lowbar;from&lowbar;temporary&lowbar;v`] 
| True when binding `To` from `From` would require a temporary conversion&period;
| link:#mrdocs-reference_converts_from_temporary_v[`reference&lowbar;converts&lowbar;from&lowbar;temporary&lowbar;v`] 
| Like `reference&lowbar;converts&lowbar;from&lowbar;temporary&lowbar;v`, but for construction&period;
| link:#mrdocs-source_location[`source&lowbar;location`] 
| Alias to `std&colon;&colon;source&lowbar;location` when available&period;
|===

== link:#mrdocs-doc[mrdocs::doc] namespace

Doc&hyphen;comment enums and helpers that describe admonition kinds&period;

=== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-AdmonitionBlock[`AdmonitionBlock`] 
| A block for side&hyphen;notes like tips, warnings, notes
| link:#mrdocs-doc-Block[`Block`] 
| A piece of block content
| link:#mrdocs-doc-BlockCommonBase-0ed[`BlockCommonBase`] 
| Base class for providing variant discriminator functions&period;
| link:#mrdocs-doc-BlockContainer[`BlockContainer`] 
| A composite block that stores a sequence of child blocks&period;
| link:#mrdocs-doc-BriefBlock[`BriefBlock`] 
| The brief description
| link:#mrdocs-doc-CodeBlock[`CodeBlock`] 
| Preformatted source code&period;
| link:#mrdocs-doc-CodeInline[`CodeInline`] 
| Inline code (monospaced) used for short snippets within text&period;
| link:#mrdocs-doc-CopyDetailsInline[`CopyDetailsInline`] 
| Documentation copied from another symbol&period;
| link:#mrdocs-doc-DefinitionListBlock[`DefinitionListBlock`] 
| A list of terms paired with definitions&period;
| link:#mrdocs-doc-DefinitionListItem[`DefinitionListItem`] 
| An item in a definition list
| link:#mrdocs-doc-EmphInline[`EmphInline`] 
| Emphasized text (typically rendered in italics)&period;
| link:#mrdocs-doc-FootnoteDefinitionBlock[`FootnoteDefinitionBlock`] 
| Text defining the content of a footnote reference&period;
| link:#mrdocs-doc-FootnoteReferenceInline[`FootnoteReferenceInline`] 
| A reference to a symbol&period;
| link:#mrdocs-doc-HeadingBlock[`HeadingBlock`] 
| A manually specified section heading&period;
| link:#mrdocs-doc-HighlightInline[`HighlightInline`] 
| Highlighted text span used to call out important words&period;
| link:#mrdocs-doc-ImageInline[`ImageInline`] 
| An image&period;
| link:#mrdocs-doc-Inline[`Inline`] 
| A Node containing a string of text&period;
| link:#mrdocs-doc-InlineCommonBase-0dc[`InlineCommonBase`] 
| Base class for providing variant discriminator functions&period;
| link:#mrdocs-doc-InlineContainer[`InlineContainer`] 
| An internal node in the inline element tree&period;
| link:#mrdocs-doc-InlineTextLeaf[`InlineTextLeaf`] 
| A leaf node that stores a string of text&period;
| link:#mrdocs-doc-LineBreakInline[`LineBreakInline`] 
| A hard line break that renders as &quot;&quot;
| link:#mrdocs-doc-LinkInline[`LinkInline`] 
| A hyperlink&period;
| link:#mrdocs-doc-ListBlock[`ListBlock`] 
| A list of list items
| link:#mrdocs-doc-ListItem[`ListItem`] 
| An item in a link:#mrdocs-doc-ListBlock[`ListBlock`]
| link:#mrdocs-doc-MathBlock[`MathBlock`] 
| A block of LaTeX math
| link:#mrdocs-doc-MathInline[`MathInline`] 
| An inline LaTeX math expression
| link:#mrdocs-doc-ParagraphBlock[`ParagraphBlock`] 
| A sequence of text nodes&period;
| link:#mrdocs-doc-ParamBlock[`ParamBlock`] 
| Documentation for a function parameter
| link:#mrdocs-doc-PostconditionBlock[`PostconditionBlock`] 
| Text describing conditions guaranteed on successful exit&period;
| link:#mrdocs-doc-PreconditionBlock[`PreconditionBlock`] 
| Text describing required conditions before entry&period;
| link:#mrdocs-doc-QuoteBlock[`QuoteBlock`] 
| A quoted block of text&period;
| link:#mrdocs-doc-ReferenceInline[`ReferenceInline`] 
| A reference to a symbol&period;
| link:#mrdocs-doc-ReturnsBlock[`ReturnsBlock`] 
| Documentation for a function return type
| link:#mrdocs-doc-SeeBlock[`SeeBlock`] 
| A
| link:#mrdocs-doc-SoftBreakInline[`SoftBreakInline`] 
| A line break that may render as a space
| link:#mrdocs-doc-StrikethroughInline[`StrikethroughInline`] 
| Strikethrough span to show removed or deprecated text&period;
| link:#mrdocs-doc-StrongInline[`StrongInline`] 
| Strong emphasis span (typically rendered in bold)&period;
| link:#mrdocs-doc-SubscriptInline[`SubscriptInline`] 
| Subscript text fragment (lowered baseline)&period;
| link:#mrdocs-doc-SuperscriptInline[`SuperscriptInline`] 
| Superscript text fragment (raised baseline)&period;
| link:#mrdocs-doc-TParamBlock[`TParamBlock`] 
| Documentation for a template parameter
| link:#mrdocs-doc-TableBlock[`TableBlock`] 
| A table block
| link:#mrdocs-doc-TableCell[`TableCell`] 
| A cell in a table
| link:#mrdocs-doc-TableRow[`TableRow`] 
| An item in a list
| link:#mrdocs-doc-TextInline[`TextInline`] 
| A Node containing a string of text&period;
| link:#mrdocs-doc-ThematicBreakBlock[`ThematicBreakBlock`] 
| A horizontal thematic break separating sections&period;
| link:#mrdocs-doc-ThrowsBlock[`ThrowsBlock`] 
| Documentation for a function exception clause
|===

=== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-AdmonitionKind[`AdmonitionKind`] 
| An admonishment style&period;
| link:#mrdocs-doc-BlockKind[`BlockKind`] 
| Enumerates the different kinds of DocComment blocks&period;
| link:#mrdocs-doc-InlineKind[`InlineKind`] 
| Enumerates the different kinds of inline nodes&period;
| link:#mrdocs-doc-ParamDirection[`ParamDirection`] 
| Parameter pass direction&period;
| link:#mrdocs-doc-Parts[`Parts`] 
| Which parts of the documentation to copy&period;
|===

=== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-getAsPlainText-02[`getAsPlainText`] 
| `getAsPlainText` overloads
| link:#mrdocs-doc-isBlockCommand[`isBlockCommand`] 
| Return true if the given block kind represents a command block&period;
| link:#mrdocs-doc-isEmpty-04[`isEmpty`] 
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-09[`ltrim`] 
| `ltrim` overloads
| link:#mrdocs-doc-rtrim-03[`rtrim`] 
| `rtrim` overloads
| link:#mrdocs-doc-tag_invoke-0e[`tag&lowbar;invoke`] 
| `tag&lowbar;invoke` overloads
| link:#mrdocs-doc-toString-0b[`toString`] 
| `toString` overloads
| link:#mrdocs-doc-traverse[`traverse`] 
| Traverse a list of inlines&period;
| link:#mrdocs-doc-trim-00[`trim`] 
| `trim` overloads
| link:#mrdocs-doc-visit-0e[`visit`] 
| `visit` overloads
| link:#mrdocs-doc-operator_eq-0a[`operator&equals;&equals;`] 
| Equality delegates to the three&hyphen;way comparison&period;
| link:#mrdocs-doc-operator_3way-01c[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

=== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-operator_3way-08[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison for any described type&period;
| link:#mrdocs-doc-operator_eq-008[`operator&equals;&equals;`] 
| Equality for any described type&period;
|===

== link:#mrdocs-dom[mrdocs::dom] namespace

Objects representing JSON&hyphen;like values&period;

=== Namespaces

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-JSON[`JSON`] 
| JSON serialization helpers for DOM values&period;
|===

=== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Array[`Array`] 
| An array of values
| link:#mrdocs-dom-ArrayImpl[`ArrayImpl`] 
| Abstract array interface&period;
| link:#mrdocs-dom-DefaultArrayImpl[`DefaultArrayImpl`] 
| The default array implementation&period;
| link:#mrdocs-dom-DefaultFunctionImpl[`DefaultFunctionImpl`] 
| Function implementation that wraps a fixed&hyphen;arity callable&period;
| link:#mrdocs-dom-DefaultObjectImpl[`DefaultObjectImpl`] 
| The default Object implementation&period;
| link:#mrdocs-dom-Function[`Function`] 
| Value&hyphen;semantic wrapper over a callable exposed to the DOM layer&period;
| link:#mrdocs-dom-FunctionImpl[`FunctionImpl`] 
| Value&hyphen;semantic wrapper over a callable exposed to the DOM layer&period;
| link:#mrdocs-dom-LazyArrayImpl-03[`LazyArrayImpl`] 
| Lazy array implementation
| link:#mrdocs-dom-LazyArrayImpl-0a[`LazyArrayImpl`] 
| Lazy array implementation
| link:#mrdocs-dom-LazyObjectImpl-04[`LazyObjectImpl`] 
| Lazy object implementation&period;
| link:#mrdocs-dom-LazyObjectImpl-09[`LazyObjectImpl`] 
| Lazy object implementation&period;
| link:#mrdocs-dom-LazyObjectMapTag[`LazyObjectMapTag`] 
| Customization point tag&period;
| link:#mrdocs-dom-Object[`Object`] 
| A container of key and value pairs&period;
| link:#mrdocs-dom-ObjectImpl[`ObjectImpl`] 
| Abstract object interface&period;
| link:#mrdocs-dom-String[`String`] 
| UTF&hyphen;8 string value used by the DOM&period;
| link:#mrdocs-dom-Value[`Value`] 
| A variant container for any kind of Dom value&period;
| link:#mrdocs-dom-ValueFromTag[`ValueFromTag`] 
| Customization point tag&period;
| link:#mrdocs-dom-VariadicFunctionImpl[`VariadicFunctionImpl`] 
| Function implementation that forwards the entire Array to a callable&period;
| link:#mrdocs-dom-function_traits-056[`function&lowbar;traits`] 
| Helper traits to extract return and argument types from callables&period;
| link:#mrdocs-dom-function_traits-06[`function&lowbar;traits&lt;F&gt;`] 
| Traits specialization for functors&sol;lambdas&period;
| link:#mrdocs-dom-function_traits-0f[`function&lowbar;traits&lt;R(*)(Args&period;&period;&period;)&gt;`] 
| Traits specialization for function pointers&period;
| link:#mrdocs-dom-function_traits-04[`function&lowbar;traits&lt;R(Args&period;&period;&period;)&gt;`] 
| Traits specialization for free functions&period;
| link:#mrdocs-dom-function_traits-05f[`function&lowbar;traits&lt;R const volatile(C::*)(Args&period;&period;&period;)&gt;`] 
| Traits specialization for member functions&period;
|===

=== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Kind[`Kind`] 
| The type of data in a Value&period;
|===

=== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-LazyArray-04[`LazyArray`] 
| `LazyArray` overloads
| link:#mrdocs-dom-LazyObject-07[`LazyObject`] 
| `LazyObject` overloads
| link:#mrdocs-dom-TransformArray[`TransformArray`] 
| Return a new dom&colon;&colon;Array based on a transformed lazy array implementation&period;
| link:#mrdocs-dom-ValueFrom-0a[`ValueFrom`] 
| `ValueFrom` overloads
| link:#mrdocs-dom-makeInvocable[`makeInvocable`] 
| Create a Function from a fixed&hyphen;arity invocable&period;
| link:#mrdocs-dom-makeVariadicInvocable[`makeVariadicInvocable`] 
| Create a Function that receives the argument Array directly&period;
| link:#mrdocs-dom-newArray[`newArray`] 
| Return a new array using a custom implementation&period;
| link:#mrdocs-dom-newFunction[`newFunction`] 
| Return a diagnostic string&period;
| link:#mrdocs-dom-newObject[`newObject`] 
| Return a new object using a custom implementation&period;
| link:#mrdocs-dom-operator_and-0df7[`operator&amp;&amp;`] 
| Return the first dom&colon;&colon;Value that is not truthy, or the last one&period;
| link:#mrdocs-dom-operator_plus-002[`operator&plus;`] 
| Addition operators
| link:#mrdocs-dom-operator_or-0e[`operator&verbar;&verbar;`] 
| Return the first dom&colon;&colon;Value that is truthy, or the last one&period;
| link:#mrdocs-dom-stringOrNull-04[`stringOrNull`] 
| Return a non&hyphen;empty string, or a null&period;
| link:#mrdocs-dom-swap-0c[`swap`] 
| `swap` overloads
| link:#mrdocs-dom-toString-07[`toString`] 
| `toString` overloads
| link:#mrdocs-dom-operator_eq-00[`operator&equals;&equals;`] 
| Equality operators
| link:#mrdocs-dom-operator_not_eq-04[`operator!&equals;`] 
| Return the result of comparing two strings&period;
| link:#mrdocs-dom-operator_3way-07b[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

=== Concepts

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-HasLazyObjectMap[`HasLazyObjectMap`] 
| Determine if `T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;
| link:#mrdocs-dom-HasLazyObjectMapWithContext[`HasLazyObjectMapWithContext`] 
| Concept to determine if a type can be mapped to a link:#mrdocs-dom-LazyObjectImpl-04[`dom&colon;&colon;LazyObjectImpl`] with a user&hyphen;provided conversion&period;
| link:#mrdocs-dom-HasLazyObjectMapWithoutContext[`HasLazyObjectMapWithoutContext`] 
| Concept to determine if a type can be mapped to a link:#mrdocs-dom-LazyObjectImpl-04[`dom&colon;&colon;LazyObjectImpl`] with a user&hyphen;provided conversion&period;
| link:#mrdocs-dom-HasStandaloneValueFrom[`HasStandaloneValueFrom`] 
| Determine if ` T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] without a context&period;
| link:#mrdocs-dom-HasValueFrom[`HasValueFrom`] 
| Determine if `T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;
| link:#mrdocs-dom-HasValueFromWithContext[`HasValueFromWithContext`] 
| Concept to determine if a type can be converted to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] with a user&hyphen;provided conversion&period;
| link:#mrdocs-dom-HasValueFromWithoutContext[`HasValueFromWithoutContext`] 
| Concept to determine if a type can be converted to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] with a user&hyphen;provided conversion&period;
| link:#mrdocs-dom-StringLikeTy[`StringLikeTy`] 
| Satisfied if StringTy is convertible to String but not a String&period;
| link:#mrdocs-dom-function_traits_convertible_to_value[`function&lowbar;traits&lowbar;convertible&lowbar;to&lowbar;value`] 
| Concept selecting callables convertible to dom&colon;&colon;Value&period;
| link:#mrdocs-dom-has_function_args_for_default_function_impl[`has&lowbar;function&lowbar;args&lowbar;for&lowbar;default&lowbar;function&lowbar;impl`] 
| Concept requiring all arguments be convertible to dom&colon;&colon;Value&period;
| link:#mrdocs-dom-has_function_traits[`has&lowbar;function&lowbar;traits`] 
| Concept true when function&lowbar;traits is defined for F&period;
| link:#mrdocs-dom-has_function_traits_for_default_function_impl[`has&lowbar;function&lowbar;traits&lowbar;for&lowbar;default&lowbar;function&lowbar;impl`] 
| Concept combining argument and return constraints for default wrapper&period;
| link:#mrdocs-dom-has_invoke_expected_result_convertible_to_dom_value[`has&lowbar;invoke&lowbar;expected&lowbar;result&lowbar;convertible&lowbar;to&lowbar;dom&lowbar;value`] 
| Concept true when F returns Expected&lt;dom&colon;&colon;Value&gt; or Expected&lt;void&gt;&period;
| link:#mrdocs-dom-has_invoke_result_convertible_to_dom_value[`has&lowbar;invoke&lowbar;result&lowbar;convertible&lowbar;to&lowbar;dom&lowbar;value`] 
| Concept true when F returns a dom&colon;&colon;Value or void&period;
| link:#mrdocs-dom-has_invoke_result_for_default_function_impl[`has&lowbar;invoke&lowbar;result&lowbar;for&lowbar;default&lowbar;function&lowbar;impl`] 
| Concept enabling default function wrapper for supported return types&period;
|===

== link:#mrdocs-dom-JSON[mrdocs::dom::JSON] namespace

JSON serialization helpers for DOM values&period;

=== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-JSON-stringify[`stringify`] 
| Stringify a value as JSON
|===

== link:#mrdocs-files[mrdocs::files] namespace

Filesystem helpers (join, temp, canonicalize) used throughout MrDocs&period;

=== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-files-FileType[`FileType`] 
| The type of a file&period;
|===

=== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-files-appendPath-04[`appendPath`] 
| `appendPath` overloads
| link:#mrdocs-files-createDirectory[`createDirectory`] 
| Create a directory&period;
| link:#mrdocs-files-exists[`exists`] 
| Determine if a path exists
| link:#mrdocs-files-getFileName[`getFileName`] 
| Return the filename part of the path&period;
| link:#mrdocs-files-getFileText[`getFileText`] 
| Return the contents of a file as a string&period;
| link:#mrdocs-files-getFileType[`getFileType`] 
| Return the file type or an error
| link:#mrdocs-files-getParentDir-00[`getParentDir`] 
| Return the parent directory&period;
| link:#mrdocs-files-getSourceFilename[`getSourceFilename`] 
| Return the relevant suffix of a source file path&period;
| link:#mrdocs-files-isAbsolute[`isAbsolute`] 
| Return true if pathName is absolute&period;
| link:#mrdocs-files-isDirectory[`isDirectory`] 
| Determine if a path is a directory&period;
| link:#mrdocs-files-isDirsy[`isDirsy`] 
| Return true if pathName ends in a separator&period;
| link:#mrdocs-files-isLexicalDirectory[`isLexicalDirectory`] 
| Determine lexically if a path is a directory&period;
| link:#mrdocs-files-isPosixStyle[`isPosixStyle`] 
| Check if the path is posix style&period;
| link:#mrdocs-files-makeAbsolute-0d[`makeAbsolute`] 
| Return an absolute path from a possibly relative path&period;
| link:#mrdocs-files-makeDirsy[`makeDirsy`] 
| Append a trailing native separator if not already present&period;
| link:#mrdocs-files-makePosixStyle[`makePosixStyle`] 
| Convert all backward slashes to forward slashes&period;
| link:#mrdocs-files-normalizeDir[`normalizeDir`] 
| Return a normalized directory&period;
| link:#mrdocs-files-normalizePath[`normalizePath`] 
| Return a normalized path&period;
| link:#mrdocs-files-requireAbsolute[`requireAbsolute`] 
| Return an error if pathName is not absolute&period;
| link:#mrdocs-files-requireDirectory[`requireDirectory`] 
| Return an error if the path is not a directory&period;
| link:#mrdocs-files-startsWith[`startsWith`] 
| Checks if the given path starts with the specified prefix&period;
| link:#mrdocs-files-withExtension[`withExtension`] 
| Return the filename with a new or different extension&period;
|===

== link:#mrdocs-helpers[mrdocs::helpers] namespace

Handlebars helper registry for templates&period;

=== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-helpers-and_fn[`and&lowbar;fn`] 
| &quot;and&quot; helper function
| link:#mrdocs-helpers-detag_fn[`detag&lowbar;fn`] 
| &quot;detag&quot; helper function
| link:#mrdocs-helpers-eq_fn[`eq&lowbar;fn`] 
| &quot;eq&quot; helper function
| link:#mrdocs-helpers-increment_fn[`increment&lowbar;fn`] 
| &quot;increment&quot; helper function
| link:#mrdocs-helpers-ne_fn[`ne&lowbar;fn`] 
| &quot;ne&quot; helper function
| link:#mrdocs-helpers-not_fn[`not&lowbar;fn`] 
| &quot;not&quot; helper function
| link:#mrdocs-helpers-or_fn[`or&lowbar;fn`] 
| &quot;or&quot; helper function
| link:#mrdocs-helpers-registerAntoraHelpers[`registerAntoraHelpers`] 
| Register all the Antora helpers into a Handlebars instance
| link:#mrdocs-helpers-registerBuiltinHelpers[`registerBuiltinHelpers`] 
| Register all the built&hyphen;in helpers into a Handlebars instance
| link:#mrdocs-helpers-registerConstructorHelpers[`registerConstructorHelpers`] 
| Register contructor helpers into a Handlebars instance
| link:#mrdocs-helpers-registerContainerHelpers[`registerContainerHelpers`] 
| Register helpers to manipulate composite data types
| link:#mrdocs-helpers-registerLogicalHelpers[`registerLogicalHelpers`] 
| Register logical helpers into a Handlebars instance
| link:#mrdocs-helpers-registerMathHelpers[`registerMathHelpers`] 
| Register math helpers into a Handlebars instance
| link:#mrdocs-helpers-registerStringHelpers[`registerStringHelpers`] 
| Register string helpers into a Handlebars instance
| link:#mrdocs-helpers-registerTypeHelpers[`registerTypeHelpers`] 
| Register type helpers into a Handlebars instance
| link:#mrdocs-helpers-relativize_fn[`relativize&lowbar;fn`] 
| &quot;relativize&quot; helper function
| link:#mrdocs-helpers-select_fn[`select&lowbar;fn`] 
| &quot;select&quot; helper function
| link:#mrdocs-helpers-year_fn[`year&lowbar;fn`] 
| &quot;year&quot; helper function
|===

== link:#mrdocs-js[mrdocs::js] namespace

JavaScript interop helpers for the embedded runtime&period;

=== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Array[`Array`] 
| Lightweight handle to a JavaScript array&period;
| link:#mrdocs-js-Boolean[`Boolean`] 
| Boolean wrapper for JavaScript values&period;
| link:#mrdocs-js-Context[`Context`] 
| An isolated JavaScript interpreter instance&period;
| link:#mrdocs-js-Object[`Object`] 
| Object wrapper for JavaScript values&period;
| link:#mrdocs-js-Scope[`Scope`] 
| A JavaScript scope for value lifetime management&period;
| link:#mrdocs-js-String[`String`] 
| String wrapper for JavaScript values&period;
| link:#mrdocs-js-Value[`Value`] 
| An ECMAScript value&period;
|===

=== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Type[`Type`] 
| Types of values&period;
|===

=== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-operator_and-0c[`operator&amp;&amp;`] 
| Return the first Value that is not truthy, or the last one&period;
| link:#mrdocs-js-operator_or-0e1[`operator&verbar;&verbar;`] 
| Return the first Value that is truthy, or the last one&period;
| link:#mrdocs-js-registerHelper[`registerHelper`] 
| Register a JavaScript helper function
| link:#mrdocs-js-swap[`swap`] 
| Swap two values&period;
| link:#mrdocs-js-toString[`toString`] 
| Return value as a string&period;
| link:#mrdocs-js-operator_eq-0c[`operator&equals;&equals;`] 
| Compare two values for equality&period;
| link:#mrdocs-js-operator_not_eq-076[`operator!&equals;`] 
| Inequality operators
| link:#mrdocs-js-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare two values for inequality&period;
|===

== link:#mrdocs-lua[mrdocs::lua] namespace

Lua interop helpers for the optional scripting&sol;backend integration&period;

=== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Access[`Access`] 
| Internal tag granting access to lua internals&period;
| link:#mrdocs-lua-Context[`Context`] 
| A reference to an instance of a Lua interpreter&period;
| link:#mrdocs-lua-Function[`Function`] 
| A Lua function&period;
| link:#mrdocs-lua-Param[`Param`] 
| A lazy container to push values to the Lua stack&period;
| link:#mrdocs-lua-Scope[`Scope`] 
| Stack scope guard for Lua calls&period;
| link:#mrdocs-lua-String[`String`] 
| A Lua string&period;
| link:#mrdocs-lua-Table[`Table`] 
| A Lua table&period;
| link:#mrdocs-lua-Value[`Value`] 
| A Lua value&period;
| link:#mrdocs-lua-zstring[`zstring`] 
| A null&hyphen;terminated string&period;
| link:#mrdocs-lua-FunctionPtr[`FunctionPtr`] 
| Pointer to a Lua&hyphen;callable function returning Value&period;
|===

=== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Type[`Type`] 
| Types of values&period;
|===

== link:#mrdocs-report[mrdocs::report] namespace

Reporting utilities (messages, statistics, sinks)&period;

=== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-Located[`Located`] 
| Parameter type that adds a source location to a value&period;
| link:#mrdocs-report-Results[`Results`] 
| Provides statistics on the number of reported messages&period;
|===

=== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-Level[`Level`] 
| Severity levels attached to reported messags&period;
|===

=== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-debug[`debug`] 
| Emit a debug&hyphen;level diagnostic for troubleshooting&period;
| link:#mrdocs-report-error[`error`] 
| Emit an error that indicates failure but allows continuation&period;
| link:#mrdocs-report-fatal[`fatal`] 
| Emit a fatal error and mark the report as the highest severity&period;
| link:#mrdocs-report-getMinimumLevel[`getMinimumLevel`] 
| Get the minimum threshold level for reporting&period;
| link:#mrdocs-report-info[`info`] 
| Emit an informational message for users&period;
| link:#mrdocs-report-log[`log`] 
| Format a message to the console&period;
| link:#mrdocs-report-print-08[`print`] 
| Report a message to the console&period;
| link:#mrdocs-report-setMinimumLevel[`setMinimumLevel`] 
| Set the minimum threshold level for reporting&period;
| link:#mrdocs-report-setSourceLocationWarnings[`setSourceLocationWarnings`] 
| If true, source location information will be printed with warnings, errors, and fatal messages&period;
| link:#mrdocs-report-trace[`trace`] 
| Emit a trace&hyphen;level diagnostic (verbose, off by default)&period;
| link:#mrdocs-report-warn[`warn`] 
| Emit a warning that does not stop execution&period;
|===

=== Variables

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-results[`results`] 
| Holds current statistics on reported messages&period;
|===

Core MrDocs support utilities&period;

== Description

The public `mrdocs` namespace here centralizes assert&sol;assume hooks so we can swap behavior (terminate, throw, debugbreak) in one place without leaking platform specifics into the rest of the codebase&period;

Doc&hyphen;comment enums and helpers that describe admonition kinds&period;

Reporting utilities (messages, statistics, sinks)&period;

The `report` namespace owns severity enums, message structs, and output sinks so tooling and libraries emit diagnostics in a uniform, testable format regardless of UI&period;

== Namespaces

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc[`doc`] 
| Doc&hyphen;comment enums and helpers that describe admonition kinds&period;
| link:#mrdocs-dom[`dom`] 
| Objects representing JSON&hyphen;like values&period;
| link:#mrdocs-files[`files`] 
| Filesystem helpers (join, temp, canonicalize) used throughout MrDocs&period;
| link:#mrdocs-helpers[`helpers`] 
| Handlebars helper registry for templates&period;
| link:#mrdocs-js[`js`] 
| JavaScript interop helpers for the embedded runtime&period;
| link:#mrdocs-lua[`lua`] 
| Lua interop helpers for the optional scripting&sol;backend integration&period;
| link:#mrdocs-report[`report`] 
| Reporting utilities (messages, statistics, sinks)&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-AnyFileVisitor[`AnyFileVisitor`] 
| Polymorphic visitor for files discovered during traversal&period;
| link:#mrdocs-ArrayType[`ArrayType`] 
| C&plus;&plus; array type (bounded or unbounded)&period;
| link:#mrdocs-ArrayView-06[`ArrayView`] 
| A non&hyphen;owning, read&hyphen;only view over a contiguous array of T&period;
| link:#mrdocs-AutoType[`AutoType`] 
| Represents `auto` or `decltype(auto)` placeholder type&period;
| link:#mrdocs-BadExpectedAccess-05[`BadExpectedAccess`] 
| Base class for accessing an empty Expected&period;
| link:#mrdocs-BadExpectedAccess-0f[`BadExpectedAccess&lt;void&gt;`] 
| Exception thrown when reading the value of an empty Expected&period;
| link:#mrdocs-BaseInfo[`BaseInfo`] 
| Metadata for a direct base&period;
| link:#mrdocs-ConceptSymbol[`ConceptSymbol`] 
| Info for concepts&period;
| link:#mrdocs-Config[`Config`] 
| Configuration used to generate the Corpus and Docs
| link:#mrdocs-ConstantExprInfo[`ConstantExprInfo`] 
| Represents an expression with a (possibly known) value
| link:#mrdocs-ConstantTArg[`ConstantTArg`] 
| Non&hyphen;type template argument&period;
| link:#mrdocs-ConstantTParam[`ConstantTParam`] 
| A constant template parameter
| link:#mrdocs-Corpus[`Corpus`] 
| The collection of declarations in extracted form&period;
| link:#mrdocs-DecltypeType[`DecltypeType`] 
| `decltype(expr)` type wrapper&period;
| link:#mrdocs-DocComment[`DocComment`] 
| A processed documentation comment attached to a declaration&period;
| link:#mrdocs-DomCorpus[`DomCorpus`] 
| Front&hyphen;end factory for producing Dom nodes&period;
| link:#mrdocs-EnumConstantSymbol[`EnumConstantSymbol`] 
| Info for enum constants&period;
| link:#mrdocs-EnumSymbol[`EnumSymbol`] 
| Metadata for an enumeration declaration&period;
| link:#mrdocs-Error[`Error`] 
| Holds the description of an error, or success&period;
| link:#mrdocs-Exception[`Exception`] 
| Type of all exceptions thrown by the API&period;
| link:#mrdocs-ExecutorGroup[`ExecutorGroup`] 
| A set of execution agents for performing concurrent work&period;
| link:#mrdocs-ExecutorGroupBase[`ExecutorGroupBase`] 
| Base class that owns a pool of execution agents and a shared work queue&period;
| link:#mrdocs-Expected-0a[`Expected`] 
| A container holding an error or a value&period;
| link:#mrdocs-Expected-0f[`Expected&lt;T, E&gt;`] 
| Expected specialization for `void` values&period; Holds either success (no payload) or an unexpected error `E`&period;
| link:#mrdocs-Expected-01[`Expected&lt;T&, E&gt;`] 
| Expected specialization for lvalue references&period; Holds either a bound reference to `T` or an unexpected error `E`&period;
| link:#mrdocs-ExplicitInfo[`ExplicitInfo`] 
| Stores only the operand of the explicit&hyphen;specifier or noexcept&hyphen;specifier as a string&period; The complete expression is not preserved at this time&period; This is a temporary design and may be improved in the future&period;
| link:#mrdocs-ExprInfo[`ExprInfo`] 
| Represents an expression
| link:#mrdocs-FormatString[`FormatString`] 
| A format string with source location&period;
| link:#mrdocs-FriendInfo[`FriendInfo`] 
| Info for friend declarations&period;
| link:#mrdocs-FunctionSymbol[`FunctionSymbol`] 
| Metadata for a function or method&period;
| link:#mrdocs-FunctionType[`FunctionType`] 
| Function type with parameters, qualifiers, and noexcept info&period;
| link:#mrdocs-Generator[`Generator`] 
| Base class for documentation generators&period;
| link:#mrdocs-GlobPattern[`GlobPattern`] 
| A glob pattern matcher
| link:#mrdocs-GuideSymbol[`GuideSymbol`] 
| Info for deduction guides&period;
| link:#mrdocs-Handlebars[`Handlebars`] 
| A handlebars environment
| link:#mrdocs-HandlebarsError[`HandlebarsError`] 
| An error thrown or returned by Handlebars
| link:#mrdocs-HandlebarsOptions[`HandlebarsOptions`] 
| Options for handlebars
| link:#mrdocs-IdentifierName[`IdentifierName`] 
| Represents an identifier
| link:#mrdocs-LValueReferenceType[`LValueReferenceType`] 
| An lvalue reference type&period;
| link:#mrdocs-Location[`Location`] 
| Source location of a symbol or entity&period;
| link:#mrdocs-MemberPointerType[`MemberPointerType`] 
| Pointer&hyphen;to&hyphen;member type (object or function)&period;
| link:#mrdocs-Name[`Name`] 
| Represents a name for a named `Type`
| link:#mrdocs-NamedType[`NamedType`] 
| A type identified by name (possibly fundamental)&period;
| link:#mrdocs-NamespaceAliasSymbol[`NamespaceAliasSymbol`] 
| Info for namespace aliases&period;
| link:#mrdocs-NamespaceSymbol[`NamespaceSymbol`] 
| Describes a namespace and its members&period;
| link:#mrdocs-NamespaceTranche[`NamespaceTranche`] 
| Buckets the members that appear inside a namespace&period;
| link:#mrdocs-NoexceptInfo[`NoexceptInfo`] 
| Captures a `noexcept` specification and its evaluated form&period;
| link:#mrdocs-Optional-03[`Optional`] 
| A compact optional that automatically uses nullable&lowbar;traits&lt;T&gt; when available&period;
| link:#mrdocs-Optional-02[`Optional&lt;T&&gt;`] 
| Optional reference wrapper that never owns storage&period;
| link:#mrdocs-OutputRef[`OutputRef`] 
| Reference to output stream used by handlebars
| link:#mrdocs-Overload-09[`Overload`] 
| Combines multiple callable types into a single overloaded function object&period;
| link:#mrdocs-OverloadsSymbol[`OverloadsSymbol`] 
| Represents a set of function overloads&period;
| link:#mrdocs-Param[`Param`] 
| Represents a single function parameter
| link:#mrdocs-ParseResult[`ParseResult`] 
| The result of a parse operation&period;
| link:#mrdocs-PathGlobPattern[`PathGlobPattern`] 
| A glob pattern matcher for paths
| link:#mrdocs-PointerType[`PointerType`] 
| Pointer type wrapper&period;
| link:#mrdocs-Polymorphic[`Polymorphic`] 
| A polymorphic value&hyphen;type&period;
| link:#mrdocs-RValueReferenceType[`RValueReferenceType`] 
| An rvalue reference type&period;
| link:#mrdocs-RangeFor-0f[`RangeFor`] 
| Range adapter to expose first&sol;last flags inside range&hyphen;for loops&period;
| link:#mrdocs-RecordInterface[`RecordInterface`] 
| The aggregated interface for a given struct, class, or union&period;
| link:#mrdocs-RecordSymbol[`RecordSymbol`] 
| Metadata for struct, class, or union&period;
| link:#mrdocs-RecordTranche[`RecordTranche`] 
| A group of members that have the same access specifier&period;
| link:#mrdocs-ReferenceDirectories[`ReferenceDirectories`] 
| Reference directories used to resolve paths
| link:#mrdocs-ScopeExit-0a[`ScopeExit`] 
| Execute a callable when the enclosing scope exits unless dismissed&period;
| link:#mrdocs-ScopeExitRestore-01[`ScopeExitRestore`] 
| RAII helper that restores a referenced value on scope exit&period;
| link:#mrdocs-SourceInfo[`SourceInfo`] 
| Stores source information for a declaration&period;
| link:#mrdocs-SourceLocation[`SourceLocation`] 
| A source location with filename prettification&period;
| link:#mrdocs-SpecializationName[`SpecializationName`] 
| Represents a (possibly qualified) symbol name with template arguments&period;
| link:#mrdocs-SplitLinesView[`SplitLinesView`] 
| A lazy input range of std&colon;&colon;string&lowbar;view lines split on all known line breaks&period;
| link:#mrdocs-StringHash[`StringHash`] 
| Transparent hash functor for string&hyphen;like keys&period;
| link:#mrdocs-Symbol[`Symbol`] 
| Base class with common properties of all symbols
| link:#mrdocs-SymbolCommonBase-015[`SymbolCommonBase`] 
| Base class for providing variant discriminator functions&period;
| link:#mrdocs-SymbolGlobPattern[`SymbolGlobPattern`] 
| A glob pattern matcher for C&plus;&plus; symbols
| link:#mrdocs-SymbolID[`SymbolID`] 
| A unique identifier for a symbol&period;
| link:#mrdocs-TArg[`TArg`] 
| Base class for any template argument&period;
| link:#mrdocs-TArgCommonBase-06[`TArgCommonBase`] 
| CRTP base that fixes the argument kind&period;
| link:#mrdocs-TParam[`TParam`] 
| Base class for a template parameter declaration&period;
| link:#mrdocs-TParamCommonBase-0c[`TParamCommonBase`] 
| CRTP base that fixes the parameter kind&period;
| link:#mrdocs-TaskGroup[`TaskGroup`] 
| A subset of possible work in a thread pool&period;
| link:#mrdocs-TemplateInfo[`TemplateInfo`] 
| Information about templates and specializations thereof&period;
| link:#mrdocs-TemplateTArg[`TemplateTArg`] 
| Template template argument&period;
| link:#mrdocs-TemplateTParam[`TemplateTParam`] 
| Template template parameter&period;
| link:#mrdocs-ThreadPool[`ThreadPool`] 
| A pool of threads for executing work concurrently&period;
| link:#mrdocs-Type[`Type`] 
| A possibly qualified type&period;
| link:#mrdocs-TypeCommonBase-0e[`TypeCommonBase`] 
| CRTP base that ties a concrete type to a fixed TypeKind&period;
| link:#mrdocs-TypeTArg[`TypeTArg`] 
| Type template argument&period;
| link:#mrdocs-TypeTParam[`TypeTParam`] 
| Type template parameter&period;
| link:#mrdocs-TypedefSymbol[`TypedefSymbol`] 
| Info for typedef and using declarations&period;
| link:#mrdocs-Unexpected-0c[`Unexpected`] 
| Holds an unexpected error value for Expected&period;
| link:#mrdocs-UsingSymbol[`UsingSymbol`] 
| Info for using declarations&period;
| link:#mrdocs-VariableSymbol[`VariableSymbol`] 
| A variable&period;
| link:#mrdocs-Visitor[`Visitor`] 
| A visitor for a type
| link:#mrdocs-YCombinator[`YCombinator`] 
| Enables recursive lambdas by passing a self&hyphen;reference as the first argument&period;
| link:#mrdocs-add_const_from[`add&lowbar;const&lowbar;from`] 
| Propagate const qualification from `From` to `To`, keeping references&period;
| link:#mrdocs-add_cv_from[`add&lowbar;cv&lowbar;from`] 
| Propagate both const and volatile qualifiers from `From` to `To`&period;
| link:#mrdocs-add_cvref_from[`add&lowbar;cvref&lowbar;from`] 
| Propagate cv&hyphen;qualification and reference category from `From` to `To`&period;
| link:#mrdocs-add_lvalue_reference_from[`add&lowbar;lvalue&lowbar;reference&lowbar;from`] 
| Propagate lvalue&hyphen;reference from `From` to `To` if present&period;
| link:#mrdocs-add_reference_from[`add&lowbar;reference&lowbar;from`] 
| Propagate reference qualification from `From` to `To`&period;
| link:#mrdocs-add_rvalue_reference_from[`add&lowbar;rvalue&lowbar;reference&lowbar;from`] 
| Propagate rvalue&hyphen;reference from `From` to `To` if present&period;
| link:#mrdocs-add_volatile_from[`add&lowbar;volatile&lowbar;from`] 
| Propagate volatile qualification from `From` to `To`, keeping references&period;
| link:#mrdocs-any_callable-01[`any&lowbar;callable`] 
| A movable, type&hyphen;erased function object&period;
| link:#mrdocs-any_callable-0a[`any&lowbar;callable&lt;R(Args&period;&period;&period;)&gt;`] 
| Type&hyphen;erased callable wrapper for signature `R(Args&period;&period;&period;)`&period;
| link:#mrdocs-make_dependent[`make&lowbar;dependent`] 
| Dependent alias of `T`, useful for delaying instantiation&period;
| link:#mrdocs-nullable_traits-0b[`nullable&lowbar;traits`] 
| nullable&lowbar;traits&lt;T&gt; defines how to treat a T as “nullable” without an external engaged bit&period;
| link:#mrdocs-nullable_traits-00[`nullable&lowbar;traits&lt;Location&gt;`] 
| nullable&lowbar;traits specialization for Location&period;
| link:#mrdocs-nullable_traits-06[`nullable&lowbar;traits&lt;T&gt;`] 
| nullable&lowbar;traits for types with a sentinel&period;
| link:#mrdocs-nullable_traits-0c[`nullable&lowbar;traits&lt;Polymorphic&lt;T&gt;&gt;`] 
| nullable&lowbar;traits for Polymorphic&lt;T&gt;&period;
| link:#mrdocs-sentinel_traits-0a[`sentinel&lowbar;traits`] 
| Defines a customization point for types that have an intrinsic sentinel value denoting “null”&period;
| link:#mrdocs-sentinel_traits-03a[`sentinel&lowbar;traits&lt;std::nullptr&lowbar;t&gt;`] 
| sentinel&lowbar;traits specialization for std&colon;&colon;nullptr&lowbar;t&period;
| link:#mrdocs-sentinel_traits-01[`sentinel&lowbar;traits&lt;T&gt;`] 
| sentinel&lowbar;traits specialization for unsigned integral types&period;
| link:#mrdocs-sentinel_traits-03c[`sentinel&lowbar;traits&lt;T*&gt;`] 
| sentinel&lowbar;traits specialization for raw pointers&period;
| link:#mrdocs-unexpect_t[`unexpect&lowbar;t`] 
| Tag type used to select unexpected construction&period;
| link:#mrdocs-unlock_guard[`unlock&lowbar;guard`] 
| A scoped guard which unlocks a mutex&period;
| link:#mrdocs-UnorderedStringMap[`UnorderedStringMap`] 
| unordered&lowbar;map keyed by std&colon;&colon;string with transparent hashing&period;
| link:#mrdocs-UnorderedStringMultiMap[`UnorderedStringMultiMap`] 
| unordered&lowbar;multimap keyed by std&colon;&colon;string with transparent hashing&period;
| link:#mrdocs-add_const_from_t[`add&lowbar;const&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;const&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_cv_from_t[`add&lowbar;cv&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;cv&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_cvref_from_t[`add&lowbar;cvref&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;cvref&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_lvalue_reference_from_t[`add&lowbar;lvalue&lowbar;reference&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;lvalue&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_reference_from_t[`add&lowbar;reference&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_rvalue_reference_from_t[`add&lowbar;rvalue&lowbar;reference&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;rvalue&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-add_volatile_from_t[`add&lowbar;volatile&lowbar;from&lowbar;t`] 
| Alias for `add&lowbar;volatile&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;
| link:#mrdocs-make_dependent_t[`make&lowbar;dependent&lowbar;t`] 
| Alias for `make&lowbar;dependent&lt;T, U&gt;&colon;&colon;type`&period;
|===

== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-AccessKind[`AccessKind`] 
| Access specifier&period;
| link:#mrdocs-AutoKind[`AutoKind`] 
| The kind of `auto` keyword used in a declaration&period;
| link:#mrdocs-ConstexprKind[`ConstexprKind`] 
| `constexpr`&sol;`consteval` specifier kinds
| link:#mrdocs-ExplicitKind[`ExplicitKind`] 
| Explicit specifier kinds
| link:#mrdocs-ExtractionMode[`ExtractionMode`] 
| Determine why a symbol is extracted
| link:#mrdocs-FileKind[`FileKind`] 
| Classifies where a file originates from&period;
| link:#mrdocs-FunctionClass[`FunctionClass`] 
| Function classifications
| link:#mrdocs-FundamentalTypeKind[`FundamentalTypeKind`] 
| Categorically describes a fundamental type&period;
| link:#mrdocs-ListKind[`ListKind`] 
| Classification of list ordering&period;
| link:#mrdocs-NameKind[`NameKind`] 
| Kinds of names that appear in type and symbol metadata&period;
| link:#mrdocs-NoexceptKind[`NoexceptKind`] 
| Exception specification kinds
| link:#mrdocs-OperatorKind[`OperatorKind`] 
| Operator kinds
| link:#mrdocs-QualifierKind[`QualifierKind`] 
| Type qualifiers
| link:#mrdocs-RecordKeyKind[`RecordKeyKind`] 
| The kind of record&colon; struct, class, or union&period;
| link:#mrdocs-ReferenceKind[`ReferenceKind`] 
| Reference type kinds
| link:#mrdocs-StorageClassKind[`StorageClassKind`] 
| Storage class kinds
| link:#mrdocs-SymbolKind[`SymbolKind`] 
| Info variant discriminator
| link:#mrdocs-TArgKind[`TArgKind`] 
| The kind of template argument&period;
| link:#mrdocs-TParamKeyKind[`TParamKeyKind`] 
| The keyword a template parameter was declared with
| link:#mrdocs-TParamKind[`TParamKind`] 
| Discriminates the different template parameter categories&period;
| link:#mrdocs-TableAlignmentKind[`TableAlignmentKind`] 
| Horizontal alignment for table columns&period;
| link:#mrdocs-TemplateSpecKind[`TemplateSpecKind`] 
| The kind of template or specialization&period;
| link:#mrdocs-TypeKind[`TypeKind`] 
| Variants of C&plus;&plus; types captured in metadata&period;
| link:#mrdocs-UsingClass[`UsingClass`] 
| The class of using declaration&period;
|===

== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-CompareDerived-0f[`CompareDerived`] 
| Compares two polymorphic objects that have visit functions
| link:#mrdocs-HTMLEscape-0f[`HTMLEscape`] 
| `HTMLEscape` overloads
| link:#mrdocs-addMember[`addMember`] 
| Append a new function overload to the set&period;
| link:#mrdocs-addMetaObject[`addMetaObject`] 
| Add a $meta object with type information&period;
| link:#mrdocs-allMembers-0a[`allMembers`] 
| `allMembers` overloads
| link:#mrdocs-assert_failed[`assert&lowbar;failed`] 
| Handler invoked when `MRDOCS&lowbar;ASSERT` fails&period;
| link:#mrdocs-bottomUpTraverse[`bottomUpTraverse`] 
| Traverse a DocComment tree bottom&hyphen;up (post&hyphen;order)&period;
| link:#mrdocs-canMerge[`canMerge`] 
| Check whether two symbols may be merged&period;
| link:#mrdocs-cast-02[`cast`] 
| `cast` overloads
| link:#mrdocs-cast_or_null-0c[`cast&lowbar;or&lowbar;null`] 
| `cast&lowbar;or&lowbar;null` overloads
| link:#mrdocs-compareSymbolNames[`compareSymbolNames`] 
| Return the result of comparing s0 to s1&period;
| link:#mrdocs-contains-06[`contains`] 
| Determine if a range contains a specific element&period;
| link:#mrdocs-contains_any-00[`contains&lowbar;any`] 
| Determine if a range contains any of the specified elements&period;
| link:#mrdocs-contains_n[`contains&lowbar;n`] 
| Determine if a range contains at least N instances of the specified element&period;
| link:#mrdocs-contains_n_any-0e[`contains&lowbar;n&lowbar;any`] 
| Determine if a range contains at least N instances of any of the specified elements&period;
| link:#mrdocs-countSymbolKind[`countSymbolKind`] 
| Count the number of SymbolKind enumerators&period;
| link:#mrdocs-createFrame-01[`createFrame`] 
| Create child data objects&period;
| link:#mrdocs-dyn_cast-02[`dyn&lowbar;cast`] 
| `dyn&lowbar;cast` overloads
| link:#mrdocs-dyn_cast_or_null-0f[`dyn&lowbar;cast&lowbar;or&lowbar;null`] 
| `dyn&lowbar;cast&lowbar;or&lowbar;null` overloads
| link:#mrdocs-endsWithOneOf[`endsWithOneOf`] 
| Determine if a string ends with one of the specified characters
| link:#mrdocs-escapeExpression[`escapeExpression`] 
| 
| link:#mrdocs-findGenerator[`findGenerator`] 
| Find a generator by its id&period;
| link:#mrdocs-find_last_of[`find&lowbar;last&lowbar;of`] 
| Find the last element in a range that matches an element in the specified range&period;
| link:#mrdocs-forEachFile-08[`forEachFile`] 
| `forEachFile` overloads
| link:#mrdocs-formatError[`formatError`] 
| Return a formatted error&period;
| link:#mrdocs-fromString[`fromString`] 
| Convert a string to a FundamentalTypeKind&period;
| link:#mrdocs-getDefaultAccessString[`getDefaultAccessString`] 
| Return the default accessibility for a record key kind&period;
| link:#mrdocs-getOperatorKind[`getOperatorKind`] 
| Return the short name of an operator as a string&period;
| link:#mrdocs-getOperatorKindFromSuffix[`getOperatorKindFromSuffix`] 
| Return the short name of an operator as a string&period;
| link:#mrdocs-getOperatorName[`getOperatorName`] 
| Return the name of an operator as a string&period;
| link:#mrdocs-getOperatorReadableName[`getOperatorReadableName`] 
| Return the human&hyphen;readable name of the operator
| link:#mrdocs-getParents-0d[`getParents`] 
| `getParents` overloads
| link:#mrdocs-getPrimaryLocation-04[`getPrimaryLocation`] 
| `getPrimaryLocation` overloads
| link:#mrdocs-getSafeOperatorName[`getSafeOperatorName`] 
| Return the safe name of an operator as a string&period;
| link:#mrdocs-getShortOperatorName[`getShortOperatorName`] 
| Return the short name of an operator as a string&period;
| link:#mrdocs-getSinglePageFullPath[`getSinglePageFullPath`] 
| Return the full path for single page output&period;
| link:#mrdocs-innerType-00[`innerType`] 
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-06[`innerTypePtr`] 
| Return the inner type&period;
| link:#mrdocs-innermostType-06[`innermostType`] 
| `innermostType` overloads
| link:#mrdocs-installGenerator[`installGenerator`] 
| Install a custom generator&period;
| link:#mrdocs-isAlphaNumeric-05[`isAlphaNumeric`] 
| `isAlphaNumeric` overloads
| link:#mrdocs-isAlphabetic-05[`isAlphabetic`] 
| `isAlphabetic` overloads
| link:#mrdocs-isBinaryOperator[`isBinaryOperator`] 
| Determines whether the operator is potentially binary&period;
| link:#mrdocs-isCopyAssignment[`isCopyAssignment`] 
| Check whether a function is a copy assignment operator&period;
| link:#mrdocs-isCopyConstructor[`isCopyConstructor`] 
| Check whether a function is a copy constructor&period;
| link:#mrdocs-isDefaultConstructor[`isDefaultConstructor`] 
| Check whether a function is a default constructor&period;
| link:#mrdocs-isDigit-03[`isDigit`] 
| `isDigit` overloads
| link:#mrdocs-isEmpty[`isEmpty`] 
| Determine if a value is empty
| link:#mrdocs-isLowerCase-04[`isLowerCase`] 
| `isLowerCase` overloads
| link:#mrdocs-isMoveAssignment[`isMoveAssignment`] 
| Check whether a function is a move assignment operator&period;
| link:#mrdocs-isMoveConstructor[`isMoveConstructor`] 
| Check whether a function is a move constructor&period;
| link:#mrdocs-isSpecialMemberFunction[`isSpecialMemberFunction`] 
| Check whether a function is a special member function&period;
| link:#mrdocs-isUnaryOperator[`isUnaryOperator`] 
| Determines whether the operator is potentially unary&period;
| link:#mrdocs-isUpperCase-04[`isUpperCase`] 
| `isUpperCase` overloads
| link:#mrdocs-isWhitespace-09[`isWhitespace`] 
| `isWhitespace` overloads
| link:#mrdocs-is_null[`is&lowbar;null`] 
| is&lowbar;null helper that uses nullable&lowbar;traits&lt;T&gt; if available&period;
| link:#mrdocs-is_one_of-0e[`is&lowbar;one&lowbar;of`] 
| Determine if an element is equal to any of the elements in the specified range&period;
| link:#mrdocs-isa[`isa`] 
| Return true if the polymorphic object holds a value of type To&period;
| link:#mrdocs-isa_or_null[`isa&lowbar;or&lowbar;null`] 
| Return true if pointer is non&hyphen;null and referent is of type To&period;
| link:#mrdocs-leastSpecific[`leastSpecific`] 
| Compare ExtractionModes and returns the least specific
| link:#mrdocs-ltrim-051[`ltrim`] 
| `ltrim` overloads
| link:#mrdocs-makeChar[`makeChar`] 
| Apply the &quot;char&quot; specifier to the type
| link:#mrdocs-makeLong[`makeLong`] 
| Apply the &quot;long&quot; specifier to the type
| link:#mrdocs-makeOverload[`makeOverload`] 
| Factory function that creates an Overload from the given callables&period;
| link:#mrdocs-makeShort[`makeShort`] 
| Apply the &quot;short&quot; specifier to the type
| link:#mrdocs-makeSigned[`makeSigned`] 
| Apply the &quot;signed&quot; specifier to the type
| link:#mrdocs-makeUnsigned[`makeUnsigned`] 
| Apply the &quot;unsigned&quot; specifier to the type
| link:#mrdocs-makeVisitor[`makeVisitor`] 
| Make a visitor for a base type
| link:#mrdocs-make_array_view-0a[`make&lowbar;array&lowbar;view`] 
| `make&lowbar;array&lowbar;view` overloads
| link:#mrdocs-make_null[`make&lowbar;null`] 
| make&lowbar;null helper that uses nullable&lowbar;traits&lt;T&gt; if available&period;
| link:#mrdocs-mapReflectedType-0f[`mapReflectedType`] 
| `mapReflectedType` overloads
| link:#mrdocs-match[`match`] 
| Applies a set of callables to a std&colon;&colon;variant using std&colon;&colon;visit and Overload&period;
| link:#mrdocs-merge-0a[`merge`] 
| `merge` overloads
| link:#mrdocs-mostSpecific[`mostSpecific`] 
| Compare ExtractionModes and returns the most specific
| link:#mrdocs-null_of[`null&lowbar;of`] 
| null&lowbar;of helper that constructs a null T using nullable&lowbar;traits&lt;T&gt;&period;
| link:#mrdocs-operator_bitor[`operator&verbar;`] 
| Pipe a contiguous character range into the adaptor&period;
| link:#mrdocs-overrides[`overrides`] 
| Determine if one function would override the other
| link:#mrdocs-parse-07[`parse`] 
| Parse a string view
| link:#mrdocs-readableTypeName[`readableTypeName`] 
| Get the unqualified name of a type&period;
| link:#mrdocs-reindentCode[`reindentCode`] 
| Reindent code by removing the common leading spaces and adding the specified indent&period;
| link:#mrdocs-replace[`replace`] 
| Return the substring without leading and trailing horizontal whitespace&period;
| link:#mrdocs-rtrim-0c[`rtrim`] 
| `rtrim` overloads
| link:#mrdocs-safeString-0a[`safeString`] 
| `safeString` overloads
| link:#mrdocs-splitLines-04[`splitLines`] 
| `splitLines` overloads
| link:#mrdocs-startsWithOneOf[`startsWithOneOf`] 
| Determine if a string starts with one of the specified characters
| link:#mrdocs-swap-07d[`swap`] 
| `swap` overloads
| link:#mrdocs-tag_invoke-005[`tag&lowbar;invoke`] 
| `tag&lowbar;invoke` overloads
| link:#mrdocs-toBase16Str[`toBase16Str`] 
| Convert a SymbolID to a string
| link:#mrdocs-toCamelCase[`toCamelCase`] 
| Convert a string to `camelCase` using ASCII letter rules&period;
| link:#mrdocs-toKebabCase[`toKebabCase`] 
| Convert a string to `kebab&hyphen;case` using ASCII letter rules&period;
| link:#mrdocs-toLowerCase-0a6[`toLowerCase`] 
| `toLowerCase` overloads
| link:#mrdocs-toPascalCase[`toPascalCase`] 
| Convert a string to `PascalCase` using ASCII letter rules&period;
| link:#mrdocs-toSnakeCase[`toSnakeCase`] 
| Convert a string to `snake&lowbar;case` using ASCII letter rules&period;
| link:#mrdocs-toString-027[`toString`] 
| `toString` overloads
| link:#mrdocs-toUpperCase-0f[`toUpperCase`] 
| `toUpperCase` overloads
| link:#mrdocs-to_underlying[`to&lowbar;underlying`] 
| Return the value as its underlying type&period;
| link:#mrdocs-topDownTraverse[`topDownTraverse`] 
| Traverse a DocComment tree top&hyphen;down (pre&hyphen;order)&period;
| link:#mrdocs-trim-0a[`trim`] 
| `trim` overloads
| link:#mrdocs-visit-0f[`visit`] 
| `visit` overloads
| link:#mrdocs-visitIndexed[`visitIndexed`] 
| Visits a std&colon;&colon;variant and calls the combined callable with the active index and the value&period;
| link:#mrdocs-yCombinator[`yCombinator`] 
| Factory that creates a YCombinator from a callable&period;
| link:#mrdocs-operator_lshift-0e1[`operator&lt;&lt;`] 
| Write to output
| link:#mrdocs-operator_eq-04[`operator&equals;&equals;`] 
| Equality operators
| link:#mrdocs-operator_not_eq-0a[`operator!&equals;`] 
| Inequality operators
| link:#mrdocs-operator_lt-0f[`operator&lt;`] 
| Less&hyphen;than operators
| link:#mrdocs-operator_le-0b[`operator&lt;&equals;`] 
| Less&hyphen;than&hyphen;or&hyphen;equal operators
| link:#mrdocs-operator_gt-09[`operator&gt;`] 
| Greater&hyphen;than operators
| link:#mrdocs-operator_ge-00[`operator&gt;&equals;`] 
| Greater&hyphen;than&hyphen;or&hyphen;equal operators
| link:#mrdocs-operator_3way-00[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

== Variables

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-unexpect[`unexpect`] 
| Tag object to request unexpected construction&period;
|===

== Concepts

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ClearableContainerLike[`ClearableContainerLike`] 
| Internal concept that matches “empty&hyphen;clear default&hyphen;constructible” types&period;
| link:#mrdocs-DescribedComparable[`DescribedComparable`] 
| True if T has described members (for comparison)&period;
| link:#mrdocs-DocCommentNode[`DocCommentNode`] 
| Concept to check if a type represents a DocComment node&period;
| link:#mrdocs-DocCommentNodeTraversable[`DocCommentNodeTraversable`] 
| Types that can be traversed by DocComment helpers&period;
| link:#mrdocs-HasParse[`HasParse`] 
| Concept to determine if there&apos;s a parse function for a type&period;
| link:#mrdocs-HasSentinel[`HasSentinel`] 
| Concept that is satisfied when sentinel&lowbar;traits&lt;T&gt; declares a usable sentinel&period;
| link:#mrdocs-SymbolParent[`SymbolParent`] 
| A concept for types that have `Symbol` members&period;
| link:#mrdocs-dereferenceable[`dereferenceable`] 
| Determine if a type is dereferenceable
| link:#mrdocs-has_nullable_traits_v[`has&lowbar;nullable&lowbar;traits&lowbar;v`] 
| Utility concept that returns true if T has a nullable&lowbar;traits specialization enabled&period;
| link:#mrdocs-pair_like[`pair&lowbar;like`] 
| Concept to check if a type is pair&hyphen;like
| link:#mrdocs-polymorphic_storage_for[`polymorphic&lowbar;storage&lowbar;for`] 
| Concept to check if a type is representing a polymorphic storage
| link:#mrdocs-range_of[`range&lowbar;of`] 
| Concept to check if a type is a range of T
| link:#mrdocs-range_of_tuple_like[`range&lowbar;of&lowbar;tuple&lowbar;like`] 
| Concept to check if a range is a range of tuple&hyphen;like elements
| link:#mrdocs-tuple_like[`tuple&lowbar;like`] 
| Concept to check if a type is tuple&hyphen;like
|===

== Deduction Guides

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ArrayView-0c[`ArrayView&lt;T&gt;`] 
| Deduce ArrayView element type from C&hyphen;style array&period;
| link:#mrdocs-ArrayView-01[`ArrayView&lt;T&gt;`] 
| Deduce ArrayView element type from pointer and count&period;
| link:#mrdocs-Overload-0a[`Overload&lt;Ts&period;&period;&period;&gt;`] 
| Class template argument deduction guide for Overload&period;
| link:#mrdocs-RangeFor-0c[`RangeFor&lt;Container&gt;`] 
| Deduction guide for RangeFor&period;
| link:#mrdocs-ScopeExit-0d[`ScopeExit&lt;F&gt;`] 
| Deduction guide for ScopeExit&period;
| link:#mrdocs-ScopeExitRestore-04[`ScopeExitRestore&lt;T&gt;`] 
| Deduction guide for ScopeExitRestore taking a reference&period;
| link:#mrdocs-ScopeExitRestore-03[`ScopeExitRestore&lt;T&gt;`] 
| Deduction guide for ScopeExitRestore taking a reference and new value&period;
| link:#mrdocs-Unexpected-0d[`Unexpected&lt;E&gt;`] 
| Deduction guide for Unexpected, forwarding the error type&period;
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-reference_constructs_from_temporary_v[`reference&lowbar;constructs&lowbar;from&lowbar;temporary&lowbar;v`] 
| True when binding `To` from `From` would require a temporary conversion&period;
| link:#mrdocs-reference_converts_from_temporary_v[`reference&lowbar;converts&lowbar;from&lowbar;temporary&lowbar;v`] 
| Like `reference&lowbar;converts&lowbar;from&lowbar;temporary&lowbar;v`, but for construction&period;
| link:#mrdocs-source_location[`source&lowbar;location`] 
| Alias to `std&colon;&colon;source&lowbar;location` when available&period;
|===

Doc&hyphen;comment enums and helpers that describe admonition kinds&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-AdmonitionBlock[`AdmonitionBlock`] 
| A block for side&hyphen;notes like tips, warnings, notes
| link:#mrdocs-doc-Block[`Block`] 
| A piece of block content
| link:#mrdocs-doc-BlockCommonBase-0ed[`BlockCommonBase`] 
| Base class for providing variant discriminator functions&period;
| link:#mrdocs-doc-BlockContainer[`BlockContainer`] 
| A composite block that stores a sequence of child blocks&period;
| link:#mrdocs-doc-BriefBlock[`BriefBlock`] 
| The brief description
| link:#mrdocs-doc-CodeBlock[`CodeBlock`] 
| Preformatted source code&period;
| link:#mrdocs-doc-CodeInline[`CodeInline`] 
| Inline code (monospaced) used for short snippets within text&period;
| link:#mrdocs-doc-CopyDetailsInline[`CopyDetailsInline`] 
| Documentation copied from another symbol&period;
| link:#mrdocs-doc-DefinitionListBlock[`DefinitionListBlock`] 
| A list of terms paired with definitions&period;
| link:#mrdocs-doc-DefinitionListItem[`DefinitionListItem`] 
| An item in a definition list
| link:#mrdocs-doc-EmphInline[`EmphInline`] 
| Emphasized text (typically rendered in italics)&period;
| link:#mrdocs-doc-FootnoteDefinitionBlock[`FootnoteDefinitionBlock`] 
| Text defining the content of a footnote reference&period;
| link:#mrdocs-doc-FootnoteReferenceInline[`FootnoteReferenceInline`] 
| A reference to a symbol&period;
| link:#mrdocs-doc-HeadingBlock[`HeadingBlock`] 
| A manually specified section heading&period;
| link:#mrdocs-doc-HighlightInline[`HighlightInline`] 
| Highlighted text span used to call out important words&period;
| link:#mrdocs-doc-ImageInline[`ImageInline`] 
| An image&period;
| link:#mrdocs-doc-Inline[`Inline`] 
| A Node containing a string of text&period;
| link:#mrdocs-doc-InlineCommonBase-0dc[`InlineCommonBase`] 
| Base class for providing variant discriminator functions&period;
| link:#mrdocs-doc-InlineContainer[`InlineContainer`] 
| An internal node in the inline element tree&period;
| link:#mrdocs-doc-InlineTextLeaf[`InlineTextLeaf`] 
| A leaf node that stores a string of text&period;
| link:#mrdocs-doc-LineBreakInline[`LineBreakInline`] 
| A hard line break that renders as &quot;&quot;
| link:#mrdocs-doc-LinkInline[`LinkInline`] 
| A hyperlink&period;
| link:#mrdocs-doc-ListBlock[`ListBlock`] 
| A list of list items
| link:#mrdocs-doc-ListItem[`ListItem`] 
| An item in a link:#mrdocs-doc-ListBlock[`ListBlock`]
| link:#mrdocs-doc-MathBlock[`MathBlock`] 
| A block of LaTeX math
| link:#mrdocs-doc-MathInline[`MathInline`] 
| An inline LaTeX math expression
| link:#mrdocs-doc-ParagraphBlock[`ParagraphBlock`] 
| A sequence of text nodes&period;
| link:#mrdocs-doc-ParamBlock[`ParamBlock`] 
| Documentation for a function parameter
| link:#mrdocs-doc-PostconditionBlock[`PostconditionBlock`] 
| Text describing conditions guaranteed on successful exit&period;
| link:#mrdocs-doc-PreconditionBlock[`PreconditionBlock`] 
| Text describing required conditions before entry&period;
| link:#mrdocs-doc-QuoteBlock[`QuoteBlock`] 
| A quoted block of text&period;
| link:#mrdocs-doc-ReferenceInline[`ReferenceInline`] 
| A reference to a symbol&period;
| link:#mrdocs-doc-ReturnsBlock[`ReturnsBlock`] 
| Documentation for a function return type
| link:#mrdocs-doc-SeeBlock[`SeeBlock`] 
| A
| link:#mrdocs-doc-SoftBreakInline[`SoftBreakInline`] 
| A line break that may render as a space
| link:#mrdocs-doc-StrikethroughInline[`StrikethroughInline`] 
| Strikethrough span to show removed or deprecated text&period;
| link:#mrdocs-doc-StrongInline[`StrongInline`] 
| Strong emphasis span (typically rendered in bold)&period;
| link:#mrdocs-doc-SubscriptInline[`SubscriptInline`] 
| Subscript text fragment (lowered baseline)&period;
| link:#mrdocs-doc-SuperscriptInline[`SuperscriptInline`] 
| Superscript text fragment (raised baseline)&period;
| link:#mrdocs-doc-TParamBlock[`TParamBlock`] 
| Documentation for a template parameter
| link:#mrdocs-doc-TableBlock[`TableBlock`] 
| A table block
| link:#mrdocs-doc-TableCell[`TableCell`] 
| A cell in a table
| link:#mrdocs-doc-TableRow[`TableRow`] 
| An item in a list
| link:#mrdocs-doc-TextInline[`TextInline`] 
| A Node containing a string of text&period;
| link:#mrdocs-doc-ThematicBreakBlock[`ThematicBreakBlock`] 
| A horizontal thematic break separating sections&period;
| link:#mrdocs-doc-ThrowsBlock[`ThrowsBlock`] 
| Documentation for a function exception clause
|===

== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-AdmonitionKind[`AdmonitionKind`] 
| An admonishment style&period;
| link:#mrdocs-doc-BlockKind[`BlockKind`] 
| Enumerates the different kinds of DocComment blocks&period;
| link:#mrdocs-doc-InlineKind[`InlineKind`] 
| Enumerates the different kinds of inline nodes&period;
| link:#mrdocs-doc-ParamDirection[`ParamDirection`] 
| Parameter pass direction&period;
| link:#mrdocs-doc-Parts[`Parts`] 
| Which parts of the documentation to copy&period;
|===

== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-getAsPlainText-02[`getAsPlainText`] 
| `getAsPlainText` overloads
| link:#mrdocs-doc-isBlockCommand[`isBlockCommand`] 
| Return true if the given block kind represents a command block&period;
| link:#mrdocs-doc-isEmpty-04[`isEmpty`] 
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-09[`ltrim`] 
| `ltrim` overloads
| link:#mrdocs-doc-rtrim-03[`rtrim`] 
| `rtrim` overloads
| link:#mrdocs-doc-tag_invoke-0e[`tag&lowbar;invoke`] 
| `tag&lowbar;invoke` overloads
| link:#mrdocs-doc-toString-0b[`toString`] 
| `toString` overloads
| link:#mrdocs-doc-traverse[`traverse`] 
| Traverse a list of inlines&period;
| link:#mrdocs-doc-trim-00[`trim`] 
| `trim` overloads
| link:#mrdocs-doc-visit-0e[`visit`] 
| `visit` overloads
| link:#mrdocs-doc-operator_eq-0a[`operator&equals;&equals;`] 
| Equality delegates to the three&hyphen;way comparison&period;
| link:#mrdocs-doc-operator_3way-01c[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-operator_3way-08[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison for any described type&period;
| link:#mrdocs-doc-operator_eq-008[`operator&equals;&equals;`] 
| Equality for any described type&period;
|===

A block for side&hyphen;notes like tips, warnings, notes

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;AdmonitionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct AdmonitionBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Admonition&gt;]
    , link:#mrdocs-doc-BlockContainer[BlockContainer]
----

== Description

This paragraph represents an admonition, such as a note, tip, important, caution, or warning&period;

Syntax&colon;

[,cpp]
----
@note text
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Admonition&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-BlockContainer[BlockContainer]`
| A composite block that stores a sequence of child blocks&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-AdmonitionBlock-2constructor[`AdmonitionBlock`]         [.small]#[constructor]#
| Construct an admonition with the given kind&period;
| link:#mrdocs-doc-BlockContainer-asBlockContainer-0c[`asBlockContainer`] 
| `asBlockContainer` overloads
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-AdmonitionBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-AdmonitionBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-AdmonitionBlock-isCode[`isCode`] 
| link:#mrdocs-doc-AdmonitionBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-AdmonitionBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-AdmonitionBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-AdmonitionBlock-isList[`isList`] 
| link:#mrdocs-doc-AdmonitionBlock-isMath[`isMath`] 
| link:#mrdocs-doc-AdmonitionBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-AdmonitionBlock-isParam[`isParam`] 
| link:#mrdocs-doc-AdmonitionBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-AdmonitionBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-AdmonitionBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-AdmonitionBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-AdmonitionBlock-isSee[`isSee`] 
| link:#mrdocs-doc-AdmonitionBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-AdmonitionBlock-isTable[`isTable`] 
| link:#mrdocs-doc-AdmonitionBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-AdmonitionBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-AdmonitionBlock-Title[`Title`] 
| Optional title for the admonition
| link:#mrdocs-doc-AdmonitionBlock-admonish[`admonish`] 
| The kind of admonition
| link:#mrdocs-doc-BlockContainer-blocks[`blocks`] 
| Child blocks contained within this composite block&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-AdmonitionBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-01[`ltrim`]
| Removes leading whitespace from the first text elements
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-06[`rtrim`]
| Removes trailing whitespace from the last text elements
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-0b[`trim`]
| Removes leading and trailing whitespace from the text elements
|===

Construct an admonition with the given kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;AdmonitionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
AdmonitionBlock(link:#mrdocs-doc-AdmonitionKind[AdmonitionKind] const admonish&lowbar; = AdmonitionKind&colon;&colon;none) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *admonish&lowbar;*
| The object to construct from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Optional title for the admonition

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;AdmonitionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Inline&gt;&gt;] Title;
----

The kind of admonition

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;AdmonitionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-AdmonitionKind[AdmonitionKind] admonish;
----

== Description

This is typically a string in other implementations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

A piece of block content

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Block;
----

== Description

The top level is a list of blocks&period;

There are two types of blocks&colon; headings and paragraphs&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-Block-2destructor[`&#126;Block`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual to allow deleting through a base pointer&period;
| link:#mrdocs-doc-Block-asBlock-01[`asBlock`] 
| `asBlock` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-Block-Kind[`Kind`] 
| Discriminator identifying which concrete block this instance holds&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-Block-2constructor-084[`Block`]         [.small]#[constructor]#
| Constructors
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-BlockCommonBase-0ed[`BlockCommonBase`]
| Base class for providing variant discriminator functions&period;
|===

Virtual to allow deleting through a base pointer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;Block() = default;
----

`asBlock` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

View this object as a `Block` reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Block[Block] const&
link:#mrdocs-doc-Block-asBlock-0d[asBlock]() const noexcept;
----

[.small]#link:#mrdocs-doc-Block-asBlock-0d[_» more&period;&period;&period;_]#

View this object as a mutable `Block` reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Block[Block]&
link:#mrdocs-doc-Block-asBlock-06[asBlock]() noexcept;
----

[.small]#link:#mrdocs-doc-Block-asBlock-06[_» more&period;&period;&period;_]#

View this object as a `Block` reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Block[Block] const&
asBlock() const noexcept;
----

== Return Value

A piece of block content

View this object as a mutable `Block` reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Block[Block]&
asBlock() noexcept;
----

== Return Value

A piece of block content

Discriminator identifying which concrete block this instance holds&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-BlockKind[BlockKind] Kind = BlockKind&colon;&colon;Paragraph;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

Default&hyphen;construct a paragraph block&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Block-2constructor-0c[Block]() = default;
----

[.small]#link:#mrdocs-doc-Block-2constructor-0c[_» more&period;&period;&period;_]#

Construct a block with the specified discriminant&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-Block-2constructor-082[Block](link:#mrdocs-doc-BlockKind[BlockKind] const kind&lowbar;) noexcept;
----

[.small]#link:#mrdocs-doc-Block-2constructor-082[_» more&period;&period;&period;_]#

Default&hyphen;construct a paragraph block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Block() = default;
----

Construct a block with the specified discriminant&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Block(link:#mrdocs-doc-BlockKind[BlockKind] const kind&lowbar;) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind&lowbar;*
| The object to construct from
|===

Base class for providing variant discriminator functions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-doc-BlockKind[BlockKind] K&gt;
struct BlockCommonBase
    : link:#mrdocs-doc-Block[Block]
----

== Description

This offers functions that return a boolean at compile&hyphen;time, indicating if the most&hyphen;derived class is a certain type&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-Block[Block]`
| A piece of block content
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockCommonBase-0ed-2destructor[`&#126;BlockCommonBase`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual to keep dynamic dispatch working for block hierarchies&period;
| link:#mrdocs-doc-Block-asBlock-01[`asBlock`] 
| `asBlock` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-Block-Kind[`Kind`] 
| Discriminator identifying which concrete block this instance holds&period;
|===

== Static Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockCommonBase-0ed-kind_id[`kind&lowbar;id`] 
| The variant discriminator constant of the most&hyphen;derived class&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockCommonBase-0ed-2constructor[`BlockCommonBase`]         [.small]#[constructor]#
| Construct with the fixed block kind&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `mrdocs::doc::mrdocs&lowbar;member&lowbar;descriptor&lowbar;fn`
| 
| `mrdocs::doc::mrdocs&lowbar;base&lowbar;descriptor&lowbar;fn`
| 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-AdmonitionBlock[`AdmonitionBlock`]
| A block for side&hyphen;notes like tips, warnings, notes
| link:#mrdocs-doc-BriefBlock[`BriefBlock`]
| The brief description
| link:#mrdocs-doc-CodeBlock[`CodeBlock`]
| Preformatted source code&period;
| link:#mrdocs-doc-DefinitionListBlock[`DefinitionListBlock`]
| A list of terms paired with definitions&period;
| link:#mrdocs-doc-FootnoteDefinitionBlock[`FootnoteDefinitionBlock`]
| Text defining the content of a footnote reference&period;
| link:#mrdocs-doc-HeadingBlock[`HeadingBlock`]
| A manually specified section heading&period;
| link:#mrdocs-doc-ListBlock[`ListBlock`]
| A list of list items
| link:#mrdocs-doc-MathBlock[`MathBlock`]
| A block of LaTeX math
| link:#mrdocs-doc-ParagraphBlock[`ParagraphBlock`]
| A sequence of text nodes&period;
| link:#mrdocs-doc-ParamBlock[`ParamBlock`]
| Documentation for a function parameter
| link:#mrdocs-doc-PostconditionBlock[`PostconditionBlock`]
| Text describing conditions guaranteed on successful exit&period;
| link:#mrdocs-doc-PreconditionBlock[`PreconditionBlock`]
| Text describing required conditions before entry&period;
| link:#mrdocs-doc-QuoteBlock[`QuoteBlock`]
| A quoted block of text&period;
| link:#mrdocs-doc-ReturnsBlock[`ReturnsBlock`]
| Documentation for a function return type
| link:#mrdocs-doc-SeeBlock[`SeeBlock`]
| A
| link:#mrdocs-doc-TParamBlock[`TParamBlock`]
| Documentation for a template parameter
| link:#mrdocs-doc-TableBlock[`TableBlock`]
| A table block
| link:#mrdocs-doc-ThematicBreakBlock[`ThematicBreakBlock`]
| A horizontal thematic break separating sections&period;
| link:#mrdocs-doc-ThrowsBlock[`ThrowsBlock`]
| Documentation for a function exception clause
|===

Virtual to keep dynamic dispatch working for block hierarchies&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;BlockCommonBase() override = default;
----

The variant discriminator constant of the most&hyphen;derived class&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id = K;
----

== Description

It only distinguishes from `Block&colon;&colon;kind` in that it is a constant&period;

Construct with the fixed block kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
BlockCommonBase();
----

A composite block that stores a sequence of child blocks&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct BlockContainer;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-asBlockContainer-0c[`asBlockContainer`] 
| `asBlockContainer` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-blocks[`blocks`] 
| Child blocks contained within this composite block&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-ltrim-01[`ltrim`]
| Removes leading whitespace from the first text elements
| link:#mrdocs-doc-rtrim-06[`rtrim`]
| Removes trailing whitespace from the last text elements
| link:#mrdocs-doc-trim-0b[`trim`]
| Removes leading and trailing whitespace from the text elements
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-AdmonitionBlock[`AdmonitionBlock`]
| A block for side&hyphen;notes like tips, warnings, notes
| link:#mrdocs-doc-DefinitionListItem[`DefinitionListItem`]
| An item in a definition list
| link:#mrdocs-doc-FootnoteDefinitionBlock[`FootnoteDefinitionBlock`]
| Text defining the content of a footnote reference&period;
| link:#mrdocs-doc-ListItem[`ListItem`]
| An item in a link:#mrdocs-doc-ListBlock[`ListBlock`]
| link:#mrdocs-doc-QuoteBlock[`QuoteBlock`]
| A quoted block of text&period;
|===

`asBlockContainer` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

Access the container as a mutable view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-BlockContainer[BlockContainer]&
link:#mrdocs-doc-BlockContainer-asBlockContainer-0e3[asBlockContainer]();
----

[.small]#link:#mrdocs-doc-BlockContainer-asBlockContainer-0e3[_» more&period;&period;&period;_]#

Access the container as a const view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-BlockContainer[BlockContainer] const&
link:#mrdocs-doc-BlockContainer-asBlockContainer-0e4[asBlockContainer]() const;
----

[.small]#link:#mrdocs-doc-BlockContainer-asBlockContainer-0e4[_» more&period;&period;&period;_]#

Access the container as a mutable view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-BlockContainer[BlockContainer]&
asBlockContainer();
----

== Return Value

A composite block that stores a sequence of child blocks&period;

Access the container as a const view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-BlockContainer[BlockContainer] const&
asBlockContainer() const;
----

== Return Value

A composite block that stores a sequence of child blocks&period;

Child blocks contained within this composite block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Polymorphic&lt;Block&gt;&gt; blocks;
----

The brief description

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct BriefBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Brief&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@brief summary
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Brief&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BriefBlock-2constructor-04[`BriefBlock`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-doc-BriefBlock-operator_assign-03[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-BriefBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-BriefBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-BriefBlock-isCode[`isCode`] 
| link:#mrdocs-doc-BriefBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-BriefBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-BriefBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-BriefBlock-isList[`isList`] 
| link:#mrdocs-doc-BriefBlock-isMath[`isMath`] 
| link:#mrdocs-doc-BriefBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-BriefBlock-isParam[`isParam`] 
| link:#mrdocs-doc-BriefBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-BriefBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-BriefBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-BriefBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-BriefBlock-isSee[`isSee`] 
| link:#mrdocs-doc-BriefBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-BriefBlock-isTable[`isTable`] 
| link:#mrdocs-doc-BriefBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-BriefBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
| link:#mrdocs-doc-BriefBlock-copiedFrom[`copiedFrom`] 
| Names of declarations whose brief text was reused&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-BriefBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BriefBlock-2constructor-0d[`BriefBlock`] 
| Inherit inline container constructors&period;
| link:#mrdocs-doc-BriefBlock-operator_assign-0e[`operator&equals;`] 
| Reuse inline container assignment operators&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

Create an empty brief&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-BriefBlock-2constructor-00[BriefBlock]() = default;
----

[.small]#link:#mrdocs-doc-BriefBlock-2constructor-00[_» more&period;&period;&period;_]#

Copy&hyphen;construct from another brief&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-BriefBlock-2constructor-01[BriefBlock](link:#mrdocs-doc-BriefBlock[BriefBlock] const& other) = default;
----

[.small]#link:#mrdocs-doc-BriefBlock-2constructor-01[_» more&period;&period;&period;_]#

Create an empty brief&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
BriefBlock() = default;
----

Copy&hyphen;construct from another brief&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
BriefBlock(link:#mrdocs-doc-BriefBlock[BriefBlock] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Copy&hyphen;assign another brief&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-BriefBlock[BriefBlock]&
link:#mrdocs-doc-BriefBlock-operator_assign-02[operator&equals;](link:#mrdocs-doc-BriefBlock[BriefBlock] const& other) = default;
----

[.small]#link:#mrdocs-doc-BriefBlock-operator_assign-02[_» more&period;&period;&period;_]#

Copy&hyphen;assign child nodes&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-05[operator&equals;](link:#mrdocs-doc-InlineContainer[InlineContainer] const& other) = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-05[_» more&period;&period;&period;_]#

Move&hyphen;assign child nodes&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-0b[operator&equals;](link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-0b[_» more&period;&period;&period;_]#

Assign an InlineContainer with a single TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-09[operator&equals;](std::string&lowbar;view text);
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-09[_» more&period;&period;&period;_]#

Copy&hyphen;assign another brief&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-BriefBlock[BriefBlock]&
operator&equals;(link:#mrdocs-doc-BriefBlock[BriefBlock] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Copy&hyphen;assign child nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(link:#mrdocs-doc-InlineContainer[InlineContainer] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move&hyphen;assign child nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Assign an InlineContainer with a single TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(std::string&lowbar;view text);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The object to assign from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Names of declarations whose brief text was reused&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; copiedFrom;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::BriefBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
Reuse inline container assignment operators&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::operator&equals;;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-operator_assign-09[mrdocs::doc::InlineContainer::operator&equals;]
| Assign an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-operator_assign-0b[mrdocs::doc::InlineContainer::operator&equals;]
| Move&hyphen;assign child nodes&period;
| link:#mrdocs-doc-InlineContainer-operator_assign-05[mrdocs::doc::InlineContainer::operator&equals;]
| Copy&hyphen;assign child nodes&period;
|===
Preformatted source code&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;CodeBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct CodeBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Code&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Code&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-CodeBlock-2constructor[`CodeBlock`]         [.small]#[constructor]#
| Construct an empty code block&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-CodeBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-CodeBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-CodeBlock-isCode[`isCode`] 
| link:#mrdocs-doc-CodeBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-CodeBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-CodeBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-CodeBlock-isList[`isList`] 
| link:#mrdocs-doc-CodeBlock-isMath[`isMath`] 
| link:#mrdocs-doc-CodeBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-CodeBlock-isParam[`isParam`] 
| link:#mrdocs-doc-CodeBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-CodeBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-CodeBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-CodeBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-CodeBlock-isSee[`isSee`] 
| link:#mrdocs-doc-CodeBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-CodeBlock-isTable[`isTable`] 
| link:#mrdocs-doc-CodeBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-CodeBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-CodeBlock-info[`info`] 
| Fence info string, e&period;g&period; &quot;cpp&quot;
| link:#mrdocs-doc-CodeBlock-literal[`literal`] 
| Raw code text inside the fenced block&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-CodeBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
|===

Construct an empty code block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;CodeBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
CodeBlock() noexcept = default;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Fence info string, e&period;g&period; &quot;cpp&quot;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;CodeBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string info;
----

Raw code text inside the fenced block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;CodeBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string literal;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inline code (monospaced) used for short snippets within text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;CodeInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct CodeInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Code&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@c inline_code
----
or

[,cpp]
----
`inline_code`
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Code&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-CodeInline-isCode[`isCode`] 
| link:#mrdocs-doc-CodeInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-CodeInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-CodeInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-CodeInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-CodeInline-isImage[`isImage`] 
| link:#mrdocs-doc-CodeInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-CodeInline-isLink[`isLink`] 
| link:#mrdocs-doc-CodeInline-isMath[`isMath`] 
| link:#mrdocs-doc-CodeInline-isReference[`isReference`] 
| link:#mrdocs-doc-CodeInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-CodeInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-CodeInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-CodeInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-CodeInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-CodeInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-CodeInline-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-CodeInline-2constructor[`CodeInline`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;CodeInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::CodeInline;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
Documentation copied from another symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;CopyDetailsInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct CopyDetailsInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;CopyDetails&gt;]
----

== Description

Syntax&colon;

[,cpp]
----
@copydetails other_symbol
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;CopyDetails&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-CopyDetailsInline-2constructor[`CopyDetailsInline`]         [.small]#[constructor]#
| Construct with optional text payload&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-CopyDetailsInline-isCode[`isCode`] 
| link:#mrdocs-doc-CopyDetailsInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-CopyDetailsInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-CopyDetailsInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-CopyDetailsInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-CopyDetailsInline-isImage[`isImage`] 
| link:#mrdocs-doc-CopyDetailsInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-CopyDetailsInline-isLink[`isLink`] 
| link:#mrdocs-doc-CopyDetailsInline-isMath[`isMath`] 
| link:#mrdocs-doc-CopyDetailsInline-isReference[`isReference`] 
| link:#mrdocs-doc-CopyDetailsInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-CopyDetailsInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-CopyDetailsInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-CopyDetailsInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-CopyDetailsInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-CopyDetailsInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-CopyDetailsInline-id[`id`] 
| Symbol to copy details from&period;
| link:#mrdocs-doc-CopyDetailsInline-string[`string`] 
| Element to copy the details from
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-CopyDetailsInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

Construct with optional text payload&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;CopyDetailsInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
CopyDetailsInline(std::string string&lowbar; = std&colon;&colon;string()) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *string&lowbar;*
| The object to construct from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

Symbol to copy details from&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;CopyDetailsInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] id = &equals; SymbolID&colon;&colon;invalid;
----

Element to copy the details from

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;CopyDetailsInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string string;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

A list of terms paired with definitions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;DefinitionListBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct DefinitionListBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;List&gt;]
----

== Description

Syntax&colon;

[,cpp]
----
Markdown
: A lightweight markup language
: Created by John Gruber in 2004

HTML
: A standard markup language used to create web pages
: Used for structuring content on the internet
----
In HTML, it looks like&colon;

[,cpp]
----
<dl>
    <dt>First Term</dt>
    <dd>This is the definition of the first term.</dd>
    <dt>Second Term</dt>
    <dd>This is one definition of the second term. </dd>
    <dd>This is another definition of the second term.</dd>
</dl>
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;List&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-DefinitionListBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-DefinitionListBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-DefinitionListBlock-isCode[`isCode`] 
| link:#mrdocs-doc-DefinitionListBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-DefinitionListBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-DefinitionListBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-DefinitionListBlock-isList[`isList`] 
| link:#mrdocs-doc-DefinitionListBlock-isMath[`isMath`] 
| link:#mrdocs-doc-DefinitionListBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-DefinitionListBlock-isParam[`isParam`] 
| link:#mrdocs-doc-DefinitionListBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-DefinitionListBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-DefinitionListBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-DefinitionListBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-DefinitionListBlock-isSee[`isSee`] 
| link:#mrdocs-doc-DefinitionListBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-DefinitionListBlock-isTable[`isTable`] 
| link:#mrdocs-doc-DefinitionListBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-DefinitionListBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-DefinitionListBlock-items[`items`] 
| Sequence of definition list items&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-DefinitionListBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Sequence of definition list items&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;DefinitionListBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;DefinitionListItem&gt; items;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

An item in a definition list

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;DefinitionListItem&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct DefinitionListItem final
    : link:#mrdocs-doc-BlockContainer[BlockContainer]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockContainer[BlockContainer]`
| A composite block that stores a sequence of child blocks&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-asBlockContainer-0c[`asBlockContainer`] 
| `asBlockContainer` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-blocks[`blocks`] 
| Child blocks contained within this composite block&period;
| link:#mrdocs-doc-DefinitionListItem-term[`term`] 
| The term being defined&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-ltrim-01[`ltrim`]
| Removes leading whitespace from the first text elements
| link:#mrdocs-doc-rtrim-06[`rtrim`]
| Removes trailing whitespace from the last text elements
| link:#mrdocs-doc-trim-0b[`trim`]
| Removes leading and trailing whitespace from the text elements
|===

The term being defined&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;DefinitionListItem&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer] term;
----

Emphasized text (typically rendered in italics)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;EmphInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct EmphInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Emph&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@e emphasized or *italic text* or _italic text_
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Emph&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-EmphInline-isCode[`isCode`] 
| link:#mrdocs-doc-EmphInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-EmphInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-EmphInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-EmphInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-EmphInline-isImage[`isImage`] 
| link:#mrdocs-doc-EmphInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-EmphInline-isLink[`isLink`] 
| link:#mrdocs-doc-EmphInline-isMath[`isMath`] 
| link:#mrdocs-doc-EmphInline-isReference[`isReference`] 
| link:#mrdocs-doc-EmphInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-EmphInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-EmphInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-EmphInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-EmphInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-EmphInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-EmphInline-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-EmphInline-2constructor[`EmphInline`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;EmphInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::EmphInline;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
Text defining the content of a footnote reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;FootnoteDefinitionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct FootnoteDefinitionBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;FootnoteDefinition&gt;]
    , link:#mrdocs-doc-BlockContainer[BlockContainer]
----

== Description

Syntax&colon;

[,cpp]
----
This is a sentence with a footnote[^1].

[^1]: This is the content of the footnote. It can also have multiple paragraphs.
      Here is the second paragraph, which needs to be indented.
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;FootnoteDefinition&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-BlockContainer[BlockContainer]`
| A composite block that stores a sequence of child blocks&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-FootnoteDefinitionBlock-2constructor[`FootnoteDefinitionBlock`]         [.small]#[constructor]#
| Construct an empty footnote definition&period;
| link:#mrdocs-doc-BlockContainer-asBlockContainer-0c[`asBlockContainer`] 
| `asBlockContainer` overloads
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-FootnoteDefinitionBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isCode[`isCode`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isList[`isList`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isMath[`isMath`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isParam[`isParam`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isSee[`isSee`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isTable[`isTable`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-FootnoteDefinitionBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-blocks[`blocks`] 
| Child blocks contained within this composite block&period;
| link:#mrdocs-doc-FootnoteDefinitionBlock-label[`label`] 
| Footnote label identifier&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-FootnoteDefinitionBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-01[`ltrim`]
| Removes leading whitespace from the first text elements
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-06[`rtrim`]
| Removes trailing whitespace from the last text elements
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-0b[`trim`]
| Removes leading and trailing whitespace from the text elements
|===

Construct an empty footnote definition&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;FootnoteDefinitionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
FootnoteDefinitionBlock() noexcept = default;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Footnote label identifier&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;FootnoteDefinitionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string label;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

A reference to a symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;FootnoteReferenceInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct FootnoteReferenceInline
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;FootnoteReference&gt;]
----

== Description

In markdown, this is represented as &quot;&lsqb;&rsqb;&quot;&period;

Syntax&colon;

[,cpp]
----
[^footnote-id]
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;FootnoteReference&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-FootnoteReferenceInline-isCode[`isCode`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isImage[`isImage`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isLink[`isLink`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isMath[`isMath`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isReference[`isReference`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-FootnoteReferenceInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-FootnoteReferenceInline-label[`label`] 
| Footnote label that the reference points to&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-FootnoteReferenceInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

Footnote label that the reference points to&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;FootnoteReferenceInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string label;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

A manually specified section heading&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;HeadingBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct HeadingBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Heading&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@par Heading
----
or in Markdown&colon;

[,cpp]
----
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Heading&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-HeadingBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-HeadingBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-HeadingBlock-isCode[`isCode`] 
| link:#mrdocs-doc-HeadingBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-HeadingBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-HeadingBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-HeadingBlock-isList[`isList`] 
| link:#mrdocs-doc-HeadingBlock-isMath[`isMath`] 
| link:#mrdocs-doc-HeadingBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-HeadingBlock-isParam[`isParam`] 
| link:#mrdocs-doc-HeadingBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-HeadingBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-HeadingBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-HeadingBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-HeadingBlock-isSee[`isSee`] 
| link:#mrdocs-doc-HeadingBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-HeadingBlock-isTable[`isTable`] 
| link:#mrdocs-doc-HeadingBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-HeadingBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
| link:#mrdocs-doc-HeadingBlock-level[`level`] 
| Heading depth (1&period;&period;6)&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-HeadingBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-HeadingBlock-2constructor[`HeadingBlock`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Heading depth (1&period;&period;6)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;HeadingBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
unsigned int level = 1;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;HeadingBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::HeadingBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
Highlighted text span used to call out important words&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;HighlightInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct HighlightInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Highlight&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
==highlight== or <mark>highlighted</mark>
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Highlight&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-HighlightInline-isCode[`isCode`] 
| link:#mrdocs-doc-HighlightInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-HighlightInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-HighlightInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-HighlightInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-HighlightInline-isImage[`isImage`] 
| link:#mrdocs-doc-HighlightInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-HighlightInline-isLink[`isLink`] 
| link:#mrdocs-doc-HighlightInline-isMath[`isMath`] 
| link:#mrdocs-doc-HighlightInline-isReference[`isReference`] 
| link:#mrdocs-doc-HighlightInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-HighlightInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-HighlightInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-HighlightInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-HighlightInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-HighlightInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-HighlightInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

An image&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;ImageInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ImageInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Image&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@image html path/to/img "alt text"
----
or

[,cpp]
----
![Alt text](image_url "Optional title text")
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Image&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-ImageInline-isCode[`isCode`] 
| link:#mrdocs-doc-ImageInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-ImageInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-ImageInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-ImageInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-ImageInline-isImage[`isImage`] 
| link:#mrdocs-doc-ImageInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-ImageInline-isLink[`isLink`] 
| link:#mrdocs-doc-ImageInline-isMath[`isMath`] 
| link:#mrdocs-doc-ImageInline-isReference[`isReference`] 
| link:#mrdocs-doc-ImageInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-ImageInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-ImageInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-ImageInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-ImageInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-ImageInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ImageInline-alt[`alt`] 
| Alternate text when the image cannot be shown&period;
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
| link:#mrdocs-doc-ImageInline-src[`src`] 
| Image source URL or path&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-ImageInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

Alternate text when the image cannot be shown&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;ImageInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string alt;
----

Image source URL or path&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;ImageInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string src;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

A Node containing a string of text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Inline;
----

== Description

There will be no newlines in the text&period; Otherwise, this would be represented as multiple text nodes within a Paragraph node&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-Inline-2destructor[`&#126;Inline`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor to enable polymorphic deletion&period;
| link:#mrdocs-doc-Inline-asInline-0b[`asInline`] 
| `asInline` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-Inline-Kind[`Kind`] 
| Discriminator identifying which inline variant is active&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-Inline-2constructor-0b[`Inline`]         [.small]#[constructor]#
| Constructors
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineCommonBase-0dc[`InlineCommonBase`]
| Base class for providing variant discriminator functions&period;
|===

Virtual destructor to enable polymorphic deletion&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;Inline() = default;
----

`asInline` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

View as const Inline reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Inline[Inline] const&
link:#mrdocs-doc-Inline-asInline-09[asInline]() const noexcept;
----

[.small]#link:#mrdocs-doc-Inline-asInline-09[_» more&period;&period;&period;_]#

View as mutable Inline reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Inline[Inline]&
link:#mrdocs-doc-Inline-asInline-05[asInline]() noexcept;
----

[.small]#link:#mrdocs-doc-Inline-asInline-05[_» more&period;&period;&period;_]#

View as const Inline reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Inline[Inline] const&
asInline() const noexcept;
----

== Return Value

A Node containing a string of text&period;

View as mutable Inline reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Inline[Inline]&
asInline() noexcept;
----

== Return Value

A Node containing a string of text&period;

Discriminator identifying which inline variant is active&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineKind[InlineKind] Kind = InlineKind&colon;&colon;Text;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Default&hyphen;construct a text inline&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-Inline-2constructor-08[Inline]() noexcept = default;
----

[.small]#link:#mrdocs-doc-Inline-2constructor-08[_» more&period;&period;&period;_]#

Construct with a specific inline kind&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-Inline-2constructor-09[Inline](link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;);
----

[.small]#link:#mrdocs-doc-Inline-2constructor-09[_» more&period;&period;&period;_]#

Default&hyphen;construct a text inline&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Inline() noexcept = default;
----

Construct with a specific inline kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Inline(link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind&lowbar;*
| The object to construct from
|===

Base class for providing variant discriminator functions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-doc-InlineKind[InlineKind] K&gt;
struct InlineCommonBase
    : link:#mrdocs-doc-Inline[Inline]
----

== Description

This offers functions that return a boolean at compile&hyphen;time, indicating if the most&hyphen;derived class is a certain type&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-Inline[Inline]`
| A Node containing a string of text&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineCommonBase-0dc-2destructor[`&#126;InlineCommonBase`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor to preserve polymorphic cleanup&period;
| link:#mrdocs-doc-Inline-asInline-0b[`asInline`] 
| `asInline` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-Inline-Kind[`Kind`] 
| Discriminator identifying which inline variant is active&period;
|===

== Static Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineCommonBase-0dc-kind_id[`kind&lowbar;id`] 
| The variant discriminator constant of the most&hyphen;derived class&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineCommonBase-0dc-2constructor[`InlineCommonBase`]         [.small]#[constructor]#
| Default&hyphen;construct with the fixed inline kind&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `mrdocs::doc::mrdocs&lowbar;member&lowbar;descriptor&lowbar;fn`
| 
| `mrdocs::doc::mrdocs&lowbar;base&lowbar;descriptor&lowbar;fn`
| 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-CodeInline[`CodeInline`]
| Inline code (monospaced) used for short snippets within text&period;
| link:#mrdocs-doc-CopyDetailsInline[`CopyDetailsInline`]
| Documentation copied from another symbol&period;
| link:#mrdocs-doc-EmphInline[`EmphInline`]
| Emphasized text (typically rendered in italics)&period;
| link:#mrdocs-doc-FootnoteReferenceInline[`FootnoteReferenceInline`]
| A reference to a symbol&period;
| link:#mrdocs-doc-HighlightInline[`HighlightInline`]
| Highlighted text span used to call out important words&period;
| link:#mrdocs-doc-ImageInline[`ImageInline`]
| An image&period;
| link:#mrdocs-doc-LineBreakInline[`LineBreakInline`]
| A hard line break that renders as &quot;&quot;
| link:#mrdocs-doc-LinkInline[`LinkInline`]
| A hyperlink&period;
| link:#mrdocs-doc-MathInline[`MathInline`]
| An inline LaTeX math expression
| link:#mrdocs-doc-ReferenceInline[`ReferenceInline`]
| A reference to a symbol&period;
| link:#mrdocs-doc-SoftBreakInline[`SoftBreakInline`]
| A line break that may render as a space
| link:#mrdocs-doc-StrikethroughInline[`StrikethroughInline`]
| Strikethrough span to show removed or deprecated text&period;
| link:#mrdocs-doc-StrongInline[`StrongInline`]
| Strong emphasis span (typically rendered in bold)&period;
| link:#mrdocs-doc-SubscriptInline[`SubscriptInline`]
| Subscript text fragment (lowered baseline)&period;
| link:#mrdocs-doc-SuperscriptInline[`SuperscriptInline`]
| Superscript text fragment (raised baseline)&period;
| link:#mrdocs-doc-TextInline[`TextInline`]
| A Node containing a string of text&period;
|===

Virtual destructor to preserve polymorphic cleanup&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;InlineCommonBase() override = default;
----

The variant discriminator constant of the most&hyphen;derived class&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id = K;
----

== Description

It only distinguishes from `Inline&colon;&colon;kind` in that it is a constant&period;

Default&hyphen;construct with the fixed inline kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
InlineCommonBase();
----

An internal node in the inline element tree&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct InlineContainer;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-2constructor-04[`InlineContainer`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-doc-InlineContainer-2destructor[`&#126;InlineContainer`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for derived containers&period;
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-BriefBlock[`BriefBlock`]
| The brief description
| link:#mrdocs-doc-CodeInline[`CodeInline`]
| Inline code (monospaced) used for short snippets within text&period;
| link:#mrdocs-doc-EmphInline[`EmphInline`]
| Emphasized text (typically rendered in italics)&period;
| link:#mrdocs-doc-HeadingBlock[`HeadingBlock`]
| A manually specified section heading&period;
| link:#mrdocs-doc-HighlightInline[`HighlightInline`]
| Highlighted text span used to call out important words&period;
| link:#mrdocs-doc-ImageInline[`ImageInline`]
| An image&period;
| link:#mrdocs-doc-LinkInline[`LinkInline`]
| A hyperlink&period;
| link:#mrdocs-doc-ParagraphBlock[`ParagraphBlock`]
| A sequence of text nodes&period;
| link:#mrdocs-doc-ParamBlock[`ParamBlock`]
| Documentation for a function parameter
| link:#mrdocs-doc-PostconditionBlock[`PostconditionBlock`]
| Text describing conditions guaranteed on successful exit&period;
| link:#mrdocs-doc-PreconditionBlock[`PreconditionBlock`]
| Text describing required conditions before entry&period;
| link:#mrdocs-doc-ReturnsBlock[`ReturnsBlock`]
| Documentation for a function return type
| link:#mrdocs-doc-SeeBlock[`SeeBlock`]
| A
| link:#mrdocs-doc-StrikethroughInline[`StrikethroughInline`]
| Strikethrough span to show removed or deprecated text&period;
| link:#mrdocs-doc-StrongInline[`StrongInline`]
| Strong emphasis span (typically rendered in bold)&period;
| link:#mrdocs-doc-SubscriptInline[`SubscriptInline`]
| Subscript text fragment (lowered baseline)&period;
| link:#mrdocs-doc-SuperscriptInline[`SuperscriptInline`]
| Superscript text fragment (raised baseline)&period;
| link:#mrdocs-doc-TParamBlock[`TParamBlock`]
| Documentation for a template parameter
| link:#mrdocs-doc-TableCell[`TableCell`]
| A cell in a table
| link:#mrdocs-doc-ThrowsBlock[`ThrowsBlock`]
| Documentation for a function exception clause
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Default&hyphen;construct an empty container&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer-2constructor-035[InlineContainer]() = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-2constructor-035[_» more&period;&period;&period;_]#

Copy&hyphen;construct all child nodes&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer-2constructor-0af[InlineContainer](link:#mrdocs-doc-InlineContainer[InlineContainer] const& other) = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-2constructor-0af[_» more&period;&period;&period;_]#

Move&hyphen;construct child nodes&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer-2constructor-07[InlineContainer](link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-2constructor-07[_» more&period;&period;&period;_]#

Construct an InlineContainer with a single TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-InlineContainer-2constructor-08[InlineContainer](std::string&lowbar;view text);
----

[.small]#link:#mrdocs-doc-InlineContainer-2constructor-08[_» more&period;&period;&period;_]#

Construct an InlineContainer with a single TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-InlineContainer-2constructor-06[InlineContainer](std::string const& text);
----

[.small]#link:#mrdocs-doc-InlineContainer-2constructor-06[_» more&period;&period;&period;_]#

Construct an InlineContainer with a single TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-InlineContainer-2constructor-03c[InlineContainer](std::string&& text);
----

[.small]#link:#mrdocs-doc-InlineContainer-2constructor-03c[_» more&period;&period;&period;_]#

Construct an InlineContainer with a single TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-InlineContainer-2constructor-0a8[InlineContainer](char const* text);
----

[.small]#link:#mrdocs-doc-InlineContainer-2constructor-0a8[_» more&period;&period;&period;_]#

Default&hyphen;construct an empty container&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
InlineContainer() = default;
----

Copy&hyphen;construct all child nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
InlineContainer(link:#mrdocs-doc-InlineContainer[InlineContainer] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Move&hyphen;construct child nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
InlineContainer(link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Construct an InlineContainer with a single TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
InlineContainer(std::string&lowbar;view text);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The object to construct from
|===

Construct an InlineContainer with a single TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
InlineContainer(std::string const& text);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The object to copy construct from
|===

Construct an InlineContainer with a single TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
InlineContainer(std::string&& text);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The object to move construct from
|===

Construct an InlineContainer with a single TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
InlineContainer(char const* text);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The value to construct from
|===

Virtual destructor for derived containers&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;InlineContainer() = default;
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Copy&hyphen;assign child nodes&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-05[operator&equals;](link:#mrdocs-doc-InlineContainer[InlineContainer] const& other) = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-05[_» more&period;&period;&period;_]#

Move&hyphen;assign child nodes&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-0b[operator&equals;](link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-0b[_» more&period;&period;&period;_]#

Assign an InlineContainer with a single TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-09[operator&equals;](std::string&lowbar;view text);
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-09[_» more&period;&period;&period;_]#

Copy&hyphen;assign child nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(link:#mrdocs-doc-InlineContainer[InlineContainer] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move&hyphen;assign child nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Assign an InlineContainer with a single TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(std::string&lowbar;view text);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The object to assign from
|===

`append` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Append a TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-append-0a[append](std::string&lowbar;view text);
----

[.small]#link:#mrdocs-doc-InlineContainer-append-0a[_» more&period;&period;&period;_]#

Append a child of the specified type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Inline&gt; InlineTy,
    class&period;&period;&period; Args&gt;
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-append-03[append](Args&&&period;&period;&period; args);
----

[.small]#link:#mrdocs-doc-InlineContainer-append-03[_» more&period;&period;&period;_]#

== Return Value

A reference to this container&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *InlineTy*
| The Inline&hyphen;derived type to add&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The text to append&period;
| *args*
| Constructor arguments forwarded to the child&period;
|===

Append a TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
append(std::string&lowbar;view text);
----

== Return Value

A reference to this container&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The text to append&period;
|===

Append a child of the specified type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Inline&gt; InlineTy,
    class&period;&period;&period; Args&gt;
link:#mrdocs-doc-InlineContainer[InlineContainer]&
append(Args&&&period;&period;&period; args);
----

== Return Value

A reference to this container&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *InlineTy*
| The Inline&hyphen;derived type to add&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Constructor arguments forwarded to the child&period;
|===

Return this container as a base&hyphen;class reference&period;

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Return this container as a base&hyphen;class reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-asInlineContainer-085[asInlineContainer]();
----

[.small]#link:#mrdocs-doc-InlineContainer-asInlineContainer-085[_» more&period;&period;&period;_]#

Return this container as a base&hyphen;class reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer] const&
link:#mrdocs-doc-InlineContainer-asInlineContainer-08a[asInlineContainer]() const;
----

[.small]#link:#mrdocs-doc-InlineContainer-asInlineContainer-08a[_» more&period;&period;&period;_]#

== Return Value

A reference to the underlying InlineContainer&period;

Return this container as a base&hyphen;class reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
asInlineContainer();
----

== Return Value

A reference to the underlying InlineContainer&period;

Return this container as a base&hyphen;class reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer] const&
asInlineContainer() const;
----

== Return Value

A reference to the underlying InlineContainer&period;

Get the last inline child&period;

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Get the last inline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const&
link:#mrdocs-doc-InlineContainer-back-06[back]() const;
----

[.small]#link:#mrdocs-doc-InlineContainer-back-06[_» more&period;&period;&period;_]#

Get the last inline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]&
link:#mrdocs-doc-InlineContainer-back-09[back]();
----

[.small]#link:#mrdocs-doc-InlineContainer-back-09[_» more&period;&period;&period;_]#

Get the last inline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const&
back() const;
----

== Return Value

the last inline child&period;

Get the last inline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]&
back();
----

== Return Value

the last inline child&period;

Begin iterator forwarding to children&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
decltype(auto)
begin(this auto&& self) noexcept;
----

== Return Value

Iterator to the first child&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *self*
| The container instance&period;
|===

Clear all inline children&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
clear();
----

Append a child of the specified type in&hyphen;place&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Inline&gt; InlineTy,
    class&period;&period;&period; Args&gt;
link:#mrdocs-doc-InlineContainer[InlineContainer]&
emplace&lowbar;back(Args&&&period;&period;&period; args);
----

== Return Value

A reference to this container&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *InlineTy*
| The Inline&hyphen;derived type to emplace&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Constructor arguments forwarded to the child&period;
|===

Determine if there are no inline children&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
empty() const noexcept;
----

== Return Value

if there are no inline children&period;

End iterator forwarding to children&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
decltype(auto)
end(this auto&& self) noexcept;
----

== Return Value

Iterator past the last child&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *self*
| The container instance&period;
|===

Erase inline children&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
decltype(auto)
erase(this 
    auto&& self,
    auto&&&period;&period;&period; args);
----

== Return Value

The iterator returned by `erase`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *self*
| The container instance&period;
| *args*
| Arguments forwarded to `std&colon;&colon;vector&colon;&colon;erase`&period;
|===

Get the first inline child&period;

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Get the first inline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const&
link:#mrdocs-doc-InlineContainer-front-09[front]() const;
----

[.small]#link:#mrdocs-doc-InlineContainer-front-09[_» more&period;&period;&period;_]#

Get the first inline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]&
link:#mrdocs-doc-InlineContainer-front-0e[front]();
----

[.small]#link:#mrdocs-doc-InlineContainer-front-0e[_» more&period;&period;&period;_]#

Get the first inline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const&
front() const;
----

== Return Value

the first inline child&period;

Get the first inline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]&
front();
----

== Return Value

the first inline child&period;

Insert inline children&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
decltype(auto)
insert(this 
    auto&& self,
    auto&&&period;&period;&period; args);
----

== Return Value

The iterator returned by `insert`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *self*
| The container instance&period;
| *args*
| Arguments forwarded to `std&colon;&colon;vector&colon;&colon;insert`&period;
|===

Addition assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Append a TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_plus_eq-0c[operator&plus;&equals;](std::string&lowbar;view text);
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_plus_eq-0c[_» more&period;&period;&period;_]#

Append an inline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::derived&lowbar;from&lt;Inline&gt; InlineTy&gt;
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_plus_eq-07[operator&plus;&equals;](InlineTy&& inlineChild);
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_plus_eq-07[_» more&period;&period;&period;_]#

Append a TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&plus;&equals;(std::string&lowbar;view text);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The right operand
|===

Append an inline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::derived&lowbar;from&lt;Inline&gt; InlineTy&gt;
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&plus;&equals;(InlineTy&& inlineChild);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *inlineChild*
| The right operand
|===

Get the number of inline children&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
size() const noexcept;
----

== Return Value

the number of inline children&period;

Child inline elements contained here&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Polymorphic&lt;Inline&gt;&gt; children;
----

A leaf node that stores a string of text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct InlineTextLeaf;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineTextLeaf-2constructor-0c[`InlineTextLeaf`]         [.small]#[constructor]#
| Constructors
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineTextLeaf-literal[`literal`] 
| Raw literal text stored in this leaf node&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Construct from a string view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-InlineTextLeaf-2constructor-0f[InlineTextLeaf](std::string&lowbar;view literal&lowbar;);
----

[.small]#link:#mrdocs-doc-InlineTextLeaf-2constructor-0f[_» more&period;&period;&period;_]#

Construct from a string copy&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-InlineTextLeaf-2constructor-09[InlineTextLeaf](std::string const& literal&lowbar;);
----

[.small]#link:#mrdocs-doc-InlineTextLeaf-2constructor-09[_» more&period;&period;&period;_]#

Construct by moving a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-InlineTextLeaf-2constructor-08[InlineTextLeaf](std::string&& literal&lowbar;) noexcept;
----

[.small]#link:#mrdocs-doc-InlineTextLeaf-2constructor-08[_» more&period;&period;&period;_]#

Construct from a string view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
InlineTextLeaf(std::string&lowbar;view literal&lowbar;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *literal&lowbar;*
| The object to construct from
|===

Construct from a string copy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
InlineTextLeaf(std::string const& literal&lowbar;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *literal&lowbar;*
| The object to copy construct from
|===

Construct by moving a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
InlineTextLeaf(std::string&& literal&lowbar;) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *literal&lowbar;*
| The object to move construct from
|===

Raw literal text stored in this leaf node&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string literal;
----

A hard line break that renders as &quot;&quot;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;LineBreakInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct LineBreakInline
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;LineBreak&gt;]
----

== Description

Syntax&colon;

[,cpp]
----
first line\
second line
----
or

[,cpp]
----
first line<br>second line
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;LineBreak&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-LineBreakInline-2constructor[`LineBreakInline`]         [.small]#[constructor]#
| Construct a line break node&period;
| link:#mrdocs-doc-LineBreakInline-2destructor[`&#126;LineBreakInline`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for the inline hierarchy&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-LineBreakInline-isCode[`isCode`] 
| link:#mrdocs-doc-LineBreakInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-LineBreakInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-LineBreakInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-LineBreakInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-LineBreakInline-isImage[`isImage`] 
| link:#mrdocs-doc-LineBreakInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-LineBreakInline-isLink[`isLink`] 
| link:#mrdocs-doc-LineBreakInline-isMath[`isMath`] 
| link:#mrdocs-doc-LineBreakInline-isReference[`isReference`] 
| link:#mrdocs-doc-LineBreakInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-LineBreakInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-LineBreakInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-LineBreakInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-LineBreakInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-LineBreakInline-isText[`isText`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-LineBreakInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

Construct a line break node&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;LineBreakInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
LineBreakInline() noexcept = default;
----

Virtual destructor for the inline hierarchy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;LineBreakInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;LineBreakInline() override = default;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

A hyperlink&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;LinkInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct LinkInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Link&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@link https://example.com label @endlink
----
Or with markdown syntax&colon;

[,cpp]
----
[link text](URL)
[link text](URL "title")
----
Or&colon;

[,cpp]
----
<a href="https://www.example.com">Visit Example.com</a>
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Link&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-LinkInline-2constructor-06[`LinkInline`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-LinkInline-isCode[`isCode`] 
| link:#mrdocs-doc-LinkInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-LinkInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-LinkInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-LinkInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-LinkInline-isImage[`isImage`] 
| link:#mrdocs-doc-LinkInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-LinkInline-isLink[`isLink`] 
| link:#mrdocs-doc-LinkInline-isMath[`isMath`] 
| link:#mrdocs-doc-LinkInline-isReference[`isReference`] 
| link:#mrdocs-doc-LinkInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-LinkInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-LinkInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-LinkInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-LinkInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-LinkInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
| link:#mrdocs-doc-LinkInline-href[`href`] 
| Destination of the hyperlink&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-LinkInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;LinkInline&period;hpp&gt;`

Construct an empty link&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-LinkInline-2constructor-08[LinkInline]() = default;
----

[.small]#link:#mrdocs-doc-LinkInline-2constructor-08[_» more&period;&period;&period;_]#

Construct a link with display text and target&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-LinkInline-2constructor-0a[LinkInline](
    std::string&lowbar;view text,
    std::string&lowbar;view href);
----

[.small]#link:#mrdocs-doc-LinkInline-2constructor-0a[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| Link text to display&period;
| *href*
| Destination URI&period;
|===

Construct an empty link&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;LinkInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
LinkInline() = default;
----

Construct a link with display text and target&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;LinkInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
LinkInline(
    std::string&lowbar;view text,
    std::string&lowbar;view href);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| Link text to display&period;
| *href*
| Destination URI&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

Destination of the hyperlink&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;LinkInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string href;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

A list of list items

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ListBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ListBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;List&gt;]
----

== Description

Syntax&colon;

[,cpp]
----
- item one
- item two
----
Unordered list&colon;

[,cpp]
----
   - Item 1
   - Item 2
     - Nested item 2.1
     - Nested item 2.2
Item 3
   + Item 4
----
Ordered list&colon;

[,cpp]
----
1. First item
2. Second item
    1. Nested ordered item 2.1
    2. Nested ordered item 2.2
3. Third item
----
Task lists (Checklists)&colon;

[,cpp]
----
- [x] Completed task
- [ ] Pending task
- [x] Another completed task
----
Definition Lists (link:#mrdocs-doc-DefinitionListBlock[`DefinitionListBlock`])

[,cpp]
----
Term 1
: Definition of Term 1

Term 2
: Definition of Term 2
: Another definition for Term 2
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;List&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-ListBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-ListBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-ListBlock-isCode[`isCode`] 
| link:#mrdocs-doc-ListBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-ListBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-ListBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-ListBlock-isList[`isList`] 
| link:#mrdocs-doc-ListBlock-isMath[`isMath`] 
| link:#mrdocs-doc-ListBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-ListBlock-isParam[`isParam`] 
| link:#mrdocs-doc-ListBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-ListBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-ListBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-ListBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-ListBlock-isSee[`isSee`] 
| link:#mrdocs-doc-ListBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-ListBlock-isTable[`isTable`] 
| link:#mrdocs-doc-ListBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-ListBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ListBlock-items[`items`] 
| Items contained in the list&period;
| link:#mrdocs-doc-ListBlock-listKind[`listKind`] 
| Display style for the list&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-ListBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Items contained in the list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ListBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;ListItem&gt; items;
----

Display style for the list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ListBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ListKind[ListKind] listKind = ListKind&colon;&colon;Unordered;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

An item in a link:#mrdocs-doc-ListBlock[`ListBlock`]

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ListItem&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ListItem final
    : link:#mrdocs-doc-BlockContainer[BlockContainer]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockContainer[BlockContainer]`
| A composite block that stores a sequence of child blocks&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-asBlockContainer-0c[`asBlockContainer`] 
| `asBlockContainer` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-blocks[`blocks`] 
| Child blocks contained within this composite block&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-ltrim-01[`ltrim`]
| Removes leading whitespace from the first text elements
| link:#mrdocs-doc-rtrim-06[`rtrim`]
| Removes trailing whitespace from the last text elements
| link:#mrdocs-doc-trim-0b[`trim`]
| Removes leading and trailing whitespace from the text elements
|===

A block of LaTeX math

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;MathBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct MathBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Math&gt;]
----

== Description

A block of LaTeX math, typically between _ … _ or fenced with &quot;math&quot;&period;

On a new line&colon;

[,cpp]
----
$$ \int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi} $$
----
Or as a code block&colon;

[,cpp]
----
```math
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
```
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Math&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-MathBlock-2constructor[`MathBlock`]         [.small]#[constructor]#
| Copy&hyphen;construct a math block&period;
| link:#mrdocs-doc-MathBlock-operator_assign[`operator&equals;`] 
| Copy&hyphen;assign a math block&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-MathBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-MathBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-MathBlock-isCode[`isCode`] 
| link:#mrdocs-doc-MathBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-MathBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-MathBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-MathBlock-isList[`isList`] 
| link:#mrdocs-doc-MathBlock-isMath[`isMath`] 
| link:#mrdocs-doc-MathBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-MathBlock-isParam[`isParam`] 
| link:#mrdocs-doc-MathBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-MathBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-MathBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-MathBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-MathBlock-isSee[`isSee`] 
| link:#mrdocs-doc-MathBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-MathBlock-isTable[`isTable`] 
| link:#mrdocs-doc-MathBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-MathBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-MathBlock-literal[`literal`] 
| Raw TeX math source
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-MathBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
|===

Copy&hyphen;construct a math block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;MathBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
MathBlock(link:#mrdocs-doc-MathBlock[MathBlock] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Copy&hyphen;assign a math block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;MathBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-MathBlock[MathBlock]&
operator&equals;(link:#mrdocs-doc-MathBlock[MathBlock] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Raw TeX math source

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;MathBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string literal;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

An inline LaTeX math expression

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;MathInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct MathInline
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Math&gt;]
----

== Description

Inline LaTeX math, typically between _…_&period;

Syntax&colon;

[,cpp]
----
$2 + 2 = 4$ or $x_{i+1}^2$
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Math&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-MathInline-2constructor-0c[`MathInline`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-doc-MathInline-2destructor[`&#126;MathInline`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for inline hierarchy&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-MathInline-isCode[`isCode`] 
| link:#mrdocs-doc-MathInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-MathInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-MathInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-MathInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-MathInline-isImage[`isImage`] 
| link:#mrdocs-doc-MathInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-MathInline-isLink[`isLink`] 
| link:#mrdocs-doc-MathInline-isMath[`isMath`] 
| link:#mrdocs-doc-MathInline-isReference[`isReference`] 
| link:#mrdocs-doc-MathInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-MathInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-MathInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-MathInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-MathInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-MathInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-MathInline-literal[`literal`] 
| Raw LaTeX&sol;TeX math content&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-MathInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;MathInline&period;hpp&gt;`

Construct an empty math inline&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-MathInline-2constructor-08[MathInline]() noexcept = default;
----

[.small]#link:#mrdocs-doc-MathInline-2constructor-08[_» more&period;&period;&period;_]#

Construct a math inline from source text&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-MathInline-2constructor-00[MathInline](std::string string&lowbar;) noexcept;
----

[.small]#link:#mrdocs-doc-MathInline-2constructor-00[_» more&period;&period;&period;_]#

Construct an empty math inline&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;MathInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
MathInline() noexcept = default;
----

Construct a math inline from source text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;MathInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
MathInline(std::string string&lowbar;) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *string&lowbar;*
| The object to construct from
|===

Virtual destructor for inline hierarchy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;MathInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;MathInline() override = default;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

Raw LaTeX&sol;TeX math content&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;MathInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string literal;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

A sequence of text nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParagraphBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ParagraphBlock
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Paragraph&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
Plain paragraph text.

Another paragraph.
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Paragraph&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ParagraphBlock-2constructor[`ParagraphBlock`]         [.small]#[constructor]#
| Construct an empty paragraph&period;
| link:#mrdocs-doc-ParagraphBlock-2destructor[`&#126;ParagraphBlock`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for the polymorphic block hierarchy&period;
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-ParagraphBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-ParagraphBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-ParagraphBlock-isCode[`isCode`] 
| link:#mrdocs-doc-ParagraphBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-ParagraphBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-ParagraphBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-ParagraphBlock-isList[`isList`] 
| link:#mrdocs-doc-ParagraphBlock-isMath[`isMath`] 
| link:#mrdocs-doc-ParagraphBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-ParagraphBlock-isParam[`isParam`] 
| link:#mrdocs-doc-ParagraphBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-ParagraphBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-ParagraphBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-ParagraphBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-ParagraphBlock-isSee[`isSee`] 
| link:#mrdocs-doc-ParagraphBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-ParagraphBlock-isTable[`isTable`] 
| link:#mrdocs-doc-ParagraphBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-ParagraphBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-ParagraphBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

Construct an empty paragraph&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParagraphBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
ParagraphBlock() noexcept = default;
----

Virtual destructor for the polymorphic block hierarchy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParagraphBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;ParagraphBlock() override = default;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Documentation for a function parameter

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ParamBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Param&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@param name description
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Param&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ParamBlock-2constructor-0ad[`ParamBlock`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-ParamBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-ParamBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-ParamBlock-isCode[`isCode`] 
| link:#mrdocs-doc-ParamBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-ParamBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-ParamBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-ParamBlock-isList[`isList`] 
| link:#mrdocs-doc-ParamBlock-isMath[`isMath`] 
| link:#mrdocs-doc-ParamBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-ParamBlock-isParam[`isParam`] 
| link:#mrdocs-doc-ParamBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-ParamBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-ParamBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-ParamBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-ParamBlock-isSee[`isSee`] 
| link:#mrdocs-doc-ParamBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-ParamBlock-isTable[`isTable`] 
| link:#mrdocs-doc-ParamBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-ParamBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
| link:#mrdocs-doc-ParamBlock-direction[`direction`] 
| Direction (in&sol;out&sol;inout) of the parameter&period;
| link:#mrdocs-doc-ParamBlock-name[`name`] 
| Name of the parameter being documented&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-ParamBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ParamBlock-2constructor-0d[`ParamBlock`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamBlock&period;hpp&gt;`

Build from an existing inline container&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-ParamBlock-2constructor-0e[ParamBlock](link:#mrdocs-doc-InlineContainer[InlineContainer] const& other);
----

[.small]#link:#mrdocs-doc-ParamBlock-2constructor-0e[_» more&period;&period;&period;_]#

Build from an rvalue inline container&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-ParamBlock-2constructor-0a6[ParamBlock](link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept;
----

[.small]#link:#mrdocs-doc-ParamBlock-2constructor-0a6[_» more&period;&period;&period;_]#

Construct from name, text, and direction&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-ParamBlock-2constructor-01[ParamBlock](
    std::string&lowbar;view name,
    std::string&lowbar;view text,
    link:#mrdocs-doc-ParamDirection[ParamDirection] direction = ParamDirection&colon;&colon;none);
----

[.small]#link:#mrdocs-doc-ParamBlock-2constructor-01[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| Parameter identifier&period;
| *text*
| Description text&period;
| *direction*
| Flow direction of the parameter&period;
|===

Build from an existing inline container&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
ParamBlock(link:#mrdocs-doc-InlineContainer[InlineContainer] const& other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Build from an rvalue inline container&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
ParamBlock(link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Construct from name, text, and direction&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
ParamBlock(
    std::string&lowbar;view name,
    std::string&lowbar;view text,
    link:#mrdocs-doc-ParamDirection[ParamDirection] direction = ParamDirection&colon;&colon;none);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| Parameter identifier&period;
| *text*
| Description text&period;
| *direction*
| Flow direction of the parameter&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Direction (in&sol;out&sol;inout) of the parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-ParamDirection[ParamDirection] direction = ParamDirection&colon;&colon;none;
----

Name of the parameter being documented&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string name;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::ParamBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
|===
Text describing conditions guaranteed on successful exit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;PostconditionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct PostconditionBlock
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Postcondition&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@post condition
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Postcondition&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-PostconditionBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-PostconditionBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-PostconditionBlock-isCode[`isCode`] 
| link:#mrdocs-doc-PostconditionBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-PostconditionBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-PostconditionBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-PostconditionBlock-isList[`isList`] 
| link:#mrdocs-doc-PostconditionBlock-isMath[`isMath`] 
| link:#mrdocs-doc-PostconditionBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-PostconditionBlock-isParam[`isParam`] 
| link:#mrdocs-doc-PostconditionBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-PostconditionBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-PostconditionBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-PostconditionBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-PostconditionBlock-isSee[`isSee`] 
| link:#mrdocs-doc-PostconditionBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-PostconditionBlock-isTable[`isTable`] 
| link:#mrdocs-doc-PostconditionBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-PostconditionBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-PostconditionBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-PostconditionBlock-2constructor[`PostconditionBlock`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;PostconditionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::PostconditionBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
Text describing required conditions before entry&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;PreconditionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct PreconditionBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Precondition&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@pre condition
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Precondition&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-PreconditionBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-PreconditionBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-PreconditionBlock-isCode[`isCode`] 
| link:#mrdocs-doc-PreconditionBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-PreconditionBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-PreconditionBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-PreconditionBlock-isList[`isList`] 
| link:#mrdocs-doc-PreconditionBlock-isMath[`isMath`] 
| link:#mrdocs-doc-PreconditionBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-PreconditionBlock-isParam[`isParam`] 
| link:#mrdocs-doc-PreconditionBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-PreconditionBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-PreconditionBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-PreconditionBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-PreconditionBlock-isSee[`isSee`] 
| link:#mrdocs-doc-PreconditionBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-PreconditionBlock-isTable[`isTable`] 
| link:#mrdocs-doc-PreconditionBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-PreconditionBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-PreconditionBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-PreconditionBlock-2constructor[`PreconditionBlock`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;PreconditionBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::PreconditionBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
A quoted block of text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;QuoteBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct QuoteBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Quote&gt;]
    , link:#mrdocs-doc-BlockContainer[BlockContainer]
----

== Description

Syntax&colon;

[,cpp]
----
> quoted text
----
Multi&hyphen;line quotes&colon;

[,cpp]
----
> This is the first line of a multi-line quote.
> This is the second line.
> And this is the third.
----
Nested quotes&colon;

[,cpp]
----
> This is the outer quote.
>
> > This is a nested quote within the outer quote.
> >
> > > This is a further nested quote.
----
Quotes with other markdown elements&colon;

[,cpp]
----
> ### Important Note
>
> - This blockquote contains a heading.
> - And a list item.
>
> *Emphasis* and **strong emphasis** also work within blockquotes.
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Quote&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-BlockContainer[BlockContainer]`
| A composite block that stores a sequence of child blocks&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-asBlockContainer-0c[`asBlockContainer`] 
| `asBlockContainer` overloads
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-QuoteBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-QuoteBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-QuoteBlock-isCode[`isCode`] 
| link:#mrdocs-doc-QuoteBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-QuoteBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-QuoteBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-QuoteBlock-isList[`isList`] 
| link:#mrdocs-doc-QuoteBlock-isMath[`isMath`] 
| link:#mrdocs-doc-QuoteBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-QuoteBlock-isParam[`isParam`] 
| link:#mrdocs-doc-QuoteBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-QuoteBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-QuoteBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-QuoteBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-QuoteBlock-isSee[`isSee`] 
| link:#mrdocs-doc-QuoteBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-QuoteBlock-isTable[`isTable`] 
| link:#mrdocs-doc-QuoteBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-QuoteBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-BlockContainer-blocks[`blocks`] 
| Child blocks contained within this composite block&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-QuoteBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-01[`ltrim`]
| Removes leading whitespace from the first text elements
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-06[`rtrim`]
| Removes trailing whitespace from the last text elements
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-0b[`trim`]
| Removes leading and trailing whitespace from the text elements
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

A reference to a symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;ReferenceInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ReferenceInline
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Reference&gt;]
----

== Description

Syntax&colon;

[,cpp]
----
@ref target "label"
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Reference&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ReferenceInline-2constructor[`ReferenceInline`]         [.small]#[constructor]#
| Construct a reference with optional display text&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-ReferenceInline-isCode[`isCode`] 
| link:#mrdocs-doc-ReferenceInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-ReferenceInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-ReferenceInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-ReferenceInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-ReferenceInline-isImage[`isImage`] 
| link:#mrdocs-doc-ReferenceInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-ReferenceInline-isLink[`isLink`] 
| link:#mrdocs-doc-ReferenceInline-isMath[`isMath`] 
| link:#mrdocs-doc-ReferenceInline-isReference[`isReference`] 
| link:#mrdocs-doc-ReferenceInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-ReferenceInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-ReferenceInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-ReferenceInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-ReferenceInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-ReferenceInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ReferenceInline-id[`id`] 
| Symbol being referenced&period;
| link:#mrdocs-doc-ReferenceInline-literal[`literal`] 
| Display text of the reference&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-ReferenceInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

Construct a reference with optional display text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;ReferenceInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
ReferenceInline(std::string str = &lcub;&rcub;) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The object to construct from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

Symbol being referenced&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;ReferenceInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] id = &equals; SymbolID&colon;&colon;invalid;
----

Display text of the reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;ReferenceInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string literal;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

Documentation for a function return type

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ReturnsBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Returns&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@return description
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Returns&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ReturnsBlock-2constructor-04c[`ReturnsBlock`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-doc-ReturnsBlock-2destructor[`&#126;ReturnsBlock`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for polymorphic base&period;
| link:#mrdocs-doc-ReturnsBlock-operator_assign-0f[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-ReturnsBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-ReturnsBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-ReturnsBlock-isCode[`isCode`] 
| link:#mrdocs-doc-ReturnsBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-ReturnsBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-ReturnsBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-ReturnsBlock-isList[`isList`] 
| link:#mrdocs-doc-ReturnsBlock-isMath[`isMath`] 
| link:#mrdocs-doc-ReturnsBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-ReturnsBlock-isParam[`isParam`] 
| link:#mrdocs-doc-ReturnsBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-ReturnsBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-ReturnsBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-ReturnsBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-ReturnsBlock-isSee[`isSee`] 
| link:#mrdocs-doc-ReturnsBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-ReturnsBlock-isTable[`isTable`] 
| link:#mrdocs-doc-ReturnsBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-ReturnsBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-ReturnsBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ReturnsBlock-2constructor-00e[`ReturnsBlock`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-ReturnsBlock-2constructor-04b[ReturnsBlock](link:#mrdocs-doc-ReturnsBlock[ReturnsBlock] const& other) = default;
----

[.small]#link:#mrdocs-doc-ReturnsBlock-2constructor-04b[_» more&period;&period;&period;_]#

Move constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-ReturnsBlock-2constructor-05[ReturnsBlock](link:#mrdocs-doc-ReturnsBlock[ReturnsBlock]&& other) noexcept = default;
----

[.small]#link:#mrdocs-doc-ReturnsBlock-2constructor-05[_» more&period;&period;&period;_]#

Construct from inline content (copy)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-ReturnsBlock-2constructor-000[ReturnsBlock](link:#mrdocs-doc-InlineContainer[InlineContainer] const& other);
----

[.small]#link:#mrdocs-doc-ReturnsBlock-2constructor-000[_» more&period;&period;&period;_]#

Construct from inline content (move)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-ReturnsBlock-2constructor-0b[ReturnsBlock](link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept;
----

[.small]#link:#mrdocs-doc-ReturnsBlock-2constructor-0b[_» more&period;&period;&period;_]#

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
ReturnsBlock(link:#mrdocs-doc-ReturnsBlock[ReturnsBlock] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
ReturnsBlock(link:#mrdocs-doc-ReturnsBlock[ReturnsBlock]&& other) noexcept = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Construct from inline content (copy)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
ReturnsBlock(link:#mrdocs-doc-InlineContainer[InlineContainer] const& other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Construct from inline content (move)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
ReturnsBlock(link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Virtual destructor for polymorphic base&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;ReturnsBlock() override = default;
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Copy&hyphen;assign child nodes&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-05[operator&equals;](link:#mrdocs-doc-InlineContainer[InlineContainer] const& other) = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-05[_» more&period;&period;&period;_]#

Copy assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-ReturnsBlock[ReturnsBlock]&
link:#mrdocs-doc-ReturnsBlock-operator_assign-03[operator&equals;](link:#mrdocs-doc-ReturnsBlock[ReturnsBlock] const& other) = default;
----

[.small]#link:#mrdocs-doc-ReturnsBlock-operator_assign-03[_» more&period;&period;&period;_]#

Move&hyphen;assign child nodes&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-0b[operator&equals;](link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept = default;
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-0b[_» more&period;&period;&period;_]#

Move assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-ReturnsBlock[ReturnsBlock]&
link:#mrdocs-doc-ReturnsBlock-operator_assign-09[operator&equals;](link:#mrdocs-doc-ReturnsBlock[ReturnsBlock]&& other) noexcept = default;
----

[.small]#link:#mrdocs-doc-ReturnsBlock-operator_assign-09[_» more&period;&period;&period;_]#

Assign an InlineContainer with a single TextInline child&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
link:#mrdocs-doc-InlineContainer-operator_assign-09[operator&equals;](std::string&lowbar;view text);
----

[.small]#link:#mrdocs-doc-InlineContainer-operator_assign-09[_» more&period;&period;&period;_]#

Copy&hyphen;assign child nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(link:#mrdocs-doc-InlineContainer[InlineContainer] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-ReturnsBlock[ReturnsBlock]&
operator&equals;(link:#mrdocs-doc-ReturnsBlock[ReturnsBlock] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move&hyphen;assign child nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(link:#mrdocs-doc-InlineContainer[InlineContainer]&& other) noexcept = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Move assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-ReturnsBlock[ReturnsBlock]&
operator&equals;(link:#mrdocs-doc-ReturnsBlock[ReturnsBlock]&& other) noexcept = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Assign an InlineContainer with a single TextInline child&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-InlineContainer[InlineContainer]&
operator&equals;(std::string&lowbar;view text);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The object to assign from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ReturnsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::ReturnsBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
|===
A

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;SeeBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct SeeBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;See&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@see other_symbol
----
or

[,cpp]
----
@see AnotherFunction()
@see MyClass::calculateSomething()
@see MyFile.h
@see "The Doxygen Manual"
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;See&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-SeeBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-SeeBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-SeeBlock-isCode[`isCode`] 
| link:#mrdocs-doc-SeeBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-SeeBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-SeeBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-SeeBlock-isList[`isList`] 
| link:#mrdocs-doc-SeeBlock-isMath[`isMath`] 
| link:#mrdocs-doc-SeeBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-SeeBlock-isParam[`isParam`] 
| link:#mrdocs-doc-SeeBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-SeeBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-SeeBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-SeeBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-SeeBlock-isSee[`isSee`] 
| link:#mrdocs-doc-SeeBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-SeeBlock-isTable[`isTable`] 
| link:#mrdocs-doc-SeeBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-SeeBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-SeeBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-SeeBlock-2constructor[`SeeBlock`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== See Also

paragraph listing related symbols or references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;SeeBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::SeeBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
A line break that may render as a space

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;SoftBreakInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct SoftBreakInline
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;SoftBreak&gt;]
----

== Description

Syntax&colon;

[,cpp]
----
This is the first part of a line,
and this is the continuation on the next line.
----
Placing a backslash () at the end of a line, followed by a new line, can also create a soft line break&period; This method is often preferred because it is less susceptible to space&hyphen;trimming issues&period;

[,cpp]
----
This is the first part of a line,\
and this is the continuation on the next line.
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;SoftBreak&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-SoftBreakInline-2constructor[`SoftBreakInline`]         [.small]#[constructor]#
| Construct a soft line break node&period;
| link:#mrdocs-doc-SoftBreakInline-2destructor[`&#126;SoftBreakInline`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for inline hierarchy&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-SoftBreakInline-isCode[`isCode`] 
| link:#mrdocs-doc-SoftBreakInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-SoftBreakInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-SoftBreakInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-SoftBreakInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-SoftBreakInline-isImage[`isImage`] 
| link:#mrdocs-doc-SoftBreakInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-SoftBreakInline-isLink[`isLink`] 
| link:#mrdocs-doc-SoftBreakInline-isMath[`isMath`] 
| link:#mrdocs-doc-SoftBreakInline-isReference[`isReference`] 
| link:#mrdocs-doc-SoftBreakInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-SoftBreakInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-SoftBreakInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-SoftBreakInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-SoftBreakInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-SoftBreakInline-isText[`isText`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-SoftBreakInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

Construct a soft line break node&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;SoftBreakInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
SoftBreakInline() noexcept = default;
----

Virtual destructor for inline hierarchy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;SoftBreakInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;SoftBreakInline() override = default;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

Strikethrough span to show removed or deprecated text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;StrikethroughInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct StrikethroughInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Strikethrough&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
~~crossed out~~
----
When rendered to HTML, the Markdown syntax above typically translates into the `del` tag, which represents content that has been deleted or is no longer accurate&period;

[,cpp]
----
<del>This text is struck through.</del>
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Strikethrough&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-StrikethroughInline-isCode[`isCode`] 
| link:#mrdocs-doc-StrikethroughInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-StrikethroughInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-StrikethroughInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-StrikethroughInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-StrikethroughInline-isImage[`isImage`] 
| link:#mrdocs-doc-StrikethroughInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-StrikethroughInline-isLink[`isLink`] 
| link:#mrdocs-doc-StrikethroughInline-isMath[`isMath`] 
| link:#mrdocs-doc-StrikethroughInline-isReference[`isReference`] 
| link:#mrdocs-doc-StrikethroughInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-StrikethroughInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-StrikethroughInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-StrikethroughInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-StrikethroughInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-StrikethroughInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-StrikethroughInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

Strong emphasis span (typically rendered in bold)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;StrongInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct StrongInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Strong&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@b bold
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Strong&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-StrongInline-isCode[`isCode`] 
| link:#mrdocs-doc-StrongInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-StrongInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-StrongInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-StrongInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-StrongInline-isImage[`isImage`] 
| link:#mrdocs-doc-StrongInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-StrongInline-isLink[`isLink`] 
| link:#mrdocs-doc-StrongInline-isMath[`isMath`] 
| link:#mrdocs-doc-StrongInline-isReference[`isReference`] 
| link:#mrdocs-doc-StrongInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-StrongInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-StrongInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-StrongInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-StrongInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-StrongInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-StrongInline-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-StrongInline-2constructor[`StrongInline`] 
| Inherit text container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

Inherit text container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;StrongInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::StrongInline;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
Subscript text fragment (lowered baseline)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;SubscriptInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct SubscriptInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Subscript&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
H~2~O
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Subscript&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-SubscriptInline-isCode[`isCode`] 
| link:#mrdocs-doc-SubscriptInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-SubscriptInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-SubscriptInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-SubscriptInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-SubscriptInline-isImage[`isImage`] 
| link:#mrdocs-doc-SubscriptInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-SubscriptInline-isLink[`isLink`] 
| link:#mrdocs-doc-SubscriptInline-isMath[`isMath`] 
| link:#mrdocs-doc-SubscriptInline-isReference[`isReference`] 
| link:#mrdocs-doc-SubscriptInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-SubscriptInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-SubscriptInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-SubscriptInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-SubscriptInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-SubscriptInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-SubscriptInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

Superscript text fragment (raised baseline)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;SuperscriptInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct SuperscriptInline final
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Superscript&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
x^2^
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Superscript&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-SuperscriptInline-isCode[`isCode`] 
| link:#mrdocs-doc-SuperscriptInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-SuperscriptInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-SuperscriptInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-SuperscriptInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-SuperscriptInline-isImage[`isImage`] 
| link:#mrdocs-doc-SuperscriptInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-SuperscriptInline-isLink[`isLink`] 
| link:#mrdocs-doc-SuperscriptInline-isMath[`isMath`] 
| link:#mrdocs-doc-SuperscriptInline-isReference[`isReference`] 
| link:#mrdocs-doc-SuperscriptInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-SuperscriptInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-SuperscriptInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-SuperscriptInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-SuperscriptInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-SuperscriptInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-SuperscriptInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

Documentation for a template parameter

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TParamBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;TParam&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@tparam T description
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;TParam&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-TParamBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-TParamBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-TParamBlock-isCode[`isCode`] 
| link:#mrdocs-doc-TParamBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-TParamBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-TParamBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-TParamBlock-isList[`isList`] 
| link:#mrdocs-doc-TParamBlock-isMath[`isMath`] 
| link:#mrdocs-doc-TParamBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-TParamBlock-isParam[`isParam`] 
| link:#mrdocs-doc-TParamBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-TParamBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-TParamBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-TParamBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-TParamBlock-isSee[`isSee`] 
| link:#mrdocs-doc-TParamBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-TParamBlock-isTable[`isTable`] 
| link:#mrdocs-doc-TParamBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-TParamBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
| link:#mrdocs-doc-TParamBlock-name[`name`] 
| Template parameter name&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-TParamBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-TParamBlock-2constructor[`TParamBlock`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Template parameter name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string name;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TParamBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::TParamBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
A table block

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TableBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TableBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Table&gt;]
----

== Description

Syntax&colon;

[,cpp]
----
| Header 1 | Header 2 | Header 3 |
| :------- | :------: | -------: |
| Left     | Center   | Right    |
| Cell 1A  | Cell 1B  | Cell 1C  |
| Cell 2A  | Cell 2B  | Cell 2C  |
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Table&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-TableBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-TableBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-TableBlock-isCode[`isCode`] 
| link:#mrdocs-doc-TableBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-TableBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-TableBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-TableBlock-isList[`isList`] 
| link:#mrdocs-doc-TableBlock-isMath[`isMath`] 
| link:#mrdocs-doc-TableBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-TableBlock-isParam[`isParam`] 
| link:#mrdocs-doc-TableBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-TableBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-TableBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-TableBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-TableBlock-isSee[`isSee`] 
| link:#mrdocs-doc-TableBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-TableBlock-isTable[`isTable`] 
| link:#mrdocs-doc-TableBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-TableBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-TableBlock-Alignments[`Alignments`] 
| Column alignments for each table column&period;
| link:#mrdocs-doc-TableBlock-items[`items`] 
| Rows that make up the table body (header first when present)&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-TableBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Column alignments for each table column&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TableBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;TableAlignmentKind&gt; Alignments;
----

Rows that make up the table body (header first when present)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TableBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;TableRow&gt; items;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

A cell in a table

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TableCell&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TableCell final
    : link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

An item in a list

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TableRow&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TableRow final
----

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-TableRow-Cells[`Cells`] 
| Cells contained in the row&period;
| link:#mrdocs-doc-TableRow-is_header[`is&lowbar;header`] 
| True if this row represents a header&period;
|===

Cells contained in the row&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TableRow&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;TableCell&gt; Cells;
----

True if this row represents a header&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TableRow&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool is&lowbar;header = false;
----

A Node containing a string of text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TextInline
    : link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Text&gt;]
----

== Description

There will be no newlines in the text&period; Otherwise, this would be represented as multiple text nodes within a Paragraph node&period;

Syntax&colon;

[,cpp]
----
plain text
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-InlineCommonBase-0dc[InlineCommonBase&lt;InlineKind&colon;&colon;Text&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-TextInline-2constructor-041[`TextInline`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-doc-TextInline-2destructor[`&#126;TextInline`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for the inline hierarchy&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-TextInline-isCode[`isCode`] 
| link:#mrdocs-doc-TextInline-isCopyDetails[`isCopyDetails`] 
| link:#mrdocs-doc-TextInline-isEmph[`isEmph`] 
| link:#mrdocs-doc-TextInline-isFootnoteReference[`isFootnoteReference`] 
| link:#mrdocs-doc-TextInline-isHighlight[`isHighlight`] 
| link:#mrdocs-doc-TextInline-isImage[`isImage`] 
| link:#mrdocs-doc-TextInline-isLineBreak[`isLineBreak`] 
| link:#mrdocs-doc-TextInline-isLink[`isLink`] 
| link:#mrdocs-doc-TextInline-isMath[`isMath`] 
| link:#mrdocs-doc-TextInline-isReference[`isReference`] 
| link:#mrdocs-doc-TextInline-isSoftBreak[`isSoftBreak`] 
| link:#mrdocs-doc-TextInline-isStrikethrough[`isStrikethrough`] 
| link:#mrdocs-doc-TextInline-isStrong[`isStrong`] 
| link:#mrdocs-doc-TextInline-isSubscript[`isSubscript`] 
| link:#mrdocs-doc-TextInline-isSuperscript[`isSuperscript`] 
| link:#mrdocs-doc-TextInline-isText[`isText`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-TextInline-literal[`literal`] 
| Plain text carried by this inline node&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-TextInline-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-08[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
| link:#mrdocs-doc-getAsPlainText-0a[`getAsPlainText`]
| Get the plain text representation of an inline element tree&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

Construct an empty text inline&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-TextInline-2constructor-0a[TextInline]() noexcept = default;
----

[.small]#link:#mrdocs-doc-TextInline-2constructor-0a[_» more&period;&period;&period;_]#

Construct from a string view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-TextInline-2constructor-047[TextInline](std::string&lowbar;view str) noexcept;
----

[.small]#link:#mrdocs-doc-TextInline-2constructor-047[_» more&period;&period;&period;_]#

Construct from a string copy&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-TextInline-2constructor-01a[TextInline](std::string const& str) noexcept;
----

[.small]#link:#mrdocs-doc-TextInline-2constructor-01a[_» more&period;&period;&period;_]#

Construct by moving text storage&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-TextInline-2constructor-018[TextInline](std::string&& str) noexcept;
----

[.small]#link:#mrdocs-doc-TextInline-2constructor-018[_» more&period;&period;&period;_]#

Construct from a C string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-doc-TextInline-2constructor-03[TextInline](char const* str) noexcept;
----

[.small]#link:#mrdocs-doc-TextInline-2constructor-03[_» more&period;&period;&period;_]#

Construct an empty text inline&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
TextInline() noexcept = default;
----

Construct from a string view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
TextInline(std::string&lowbar;view str) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The object to construct from
|===

Construct from a string copy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
TextInline(std::string const& str) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The object to copy construct from
|===

Construct by moving text storage&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
TextInline(std::string&& str) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The object to move construct from
|===

Construct from a C string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
TextInline(char const* str) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The value to construct from
|===

Virtual destructor for the inline hierarchy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;TextInline() override = default;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCopyDetails() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEmph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHighlight() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isImage() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLineBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLink() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSoftBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrikethrough() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isStrong() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSubscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSuperscript() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isText() noexcept;
----

Plain text carried by this inline node&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;TextInline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string literal;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-InlineKind[InlineKind] kind&lowbar;id;
----

A horizontal thematic break separating sections&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ThematicBreakBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ThematicBreakBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;ThematicBreak&gt;]
----

== Description

Syntax&colon;

[,cpp]
----
---
----
or

[,cpp]
----
**
----
or

[,cpp]
----
___
----
or

[,cpp]
----
- - -
----
* You can use an asterisk (_), dash (&hyphen;), or underscore (_)&period;
* There must be at least three characters in a row&period;
* Spaces can be used between the characters, but no other characters&period;
* The thematic break should be on its own line, separated by blank lines above and below&period;
* Thematic breaks can also be used inside lists, but the character used for the break must be different from the list marker&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;ThematicBreak&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ThematicBreakBlock-2constructor[`ThematicBreakBlock`]         [.small]#[constructor]#
| Copy constructor&period;
| link:#mrdocs-doc-ThematicBreakBlock-operator_assign[`operator&equals;`] 
| Copy assignment&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-ThematicBreakBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-ThematicBreakBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-ThematicBreakBlock-isCode[`isCode`] 
| link:#mrdocs-doc-ThematicBreakBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-ThematicBreakBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-ThematicBreakBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-ThematicBreakBlock-isList[`isList`] 
| link:#mrdocs-doc-ThematicBreakBlock-isMath[`isMath`] 
| link:#mrdocs-doc-ThematicBreakBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-ThematicBreakBlock-isParam[`isParam`] 
| link:#mrdocs-doc-ThematicBreakBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-ThematicBreakBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-ThematicBreakBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-ThematicBreakBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-ThematicBreakBlock-isSee[`isSee`] 
| link:#mrdocs-doc-ThematicBreakBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-ThematicBreakBlock-isTable[`isTable`] 
| link:#mrdocs-doc-ThematicBreakBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-ThematicBreakBlock-isThrows[`isThrows`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-ThematicBreakBlock-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
|===

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ThematicBreakBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
ThematicBreakBlock(link:#mrdocs-doc-ThematicBreakBlock[ThematicBreakBlock] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ThematicBreakBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-doc-ThematicBreakBlock[ThematicBreakBlock]&
operator&equals;(link:#mrdocs-doc-ThematicBreakBlock[ThematicBreakBlock] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Documentation for a function exception clause

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ThrowsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ThrowsBlock final
    : link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Throws&gt;]
    , link:#mrdocs-doc-InlineContainer[InlineContainer]
----

== Description

Syntax&colon;

[,cpp]
----
@throws Type description
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-doc-BlockCommonBase-0ed[BlockCommonBase&lt;BlockKind&colon;&colon;Throws&gt;]`
| Base class for providing variant discriminator functions&period;
| `link:#mrdocs-doc-InlineContainer[InlineContainer]`
| An internal node in the inline element tree&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-doc-InlineContainer-append-0c[`append`] 
| `append` overloads
| link:#mrdocs-doc-InlineContainer-asInlineContainer-0b[`asInlineContainer`] 
| Return this container as a base&hyphen;class reference&period;
| link:#mrdocs-doc-InlineContainer-back-03[`back`] 
| Get the last inline child&period;
| link:#mrdocs-doc-InlineContainer-begin[`begin`] 
| Begin iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-clear[`clear`] 
| Clear all inline children&period;
| link:#mrdocs-doc-InlineContainer-emplace_back[`emplace&lowbar;back`] 
| Append a child of the specified type in&hyphen;place&period;
| link:#mrdocs-doc-InlineContainer-empty[`empty`] 
| Determine if there are no inline children&period;
| link:#mrdocs-doc-InlineContainer-end[`end`] 
| End iterator forwarding to children&period;
| link:#mrdocs-doc-InlineContainer-erase[`erase`] 
| Erase inline children&period;
| link:#mrdocs-doc-InlineContainer-front-03[`front`] 
| Get the first inline child&period;
| link:#mrdocs-doc-InlineContainer-insert[`insert`] 
| Insert inline children&period;
| link:#mrdocs-doc-InlineContainer-operator_plus_eq-06[`operator&plus;&equals;`] 
| Addition assignment operators
| link:#mrdocs-doc-InlineContainer-size[`size`] 
| Get the number of inline children&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-doc-ThrowsBlock-isAdmonition[`isAdmonition`] 
| link:#mrdocs-doc-ThrowsBlock-isBrief[`isBrief`] 
| link:#mrdocs-doc-ThrowsBlock-isCode[`isCode`] 
| link:#mrdocs-doc-ThrowsBlock-isDefinitionList[`isDefinitionList`] 
| link:#mrdocs-doc-ThrowsBlock-isFootnoteDefinition[`isFootnoteDefinition`] 
| link:#mrdocs-doc-ThrowsBlock-isHeading[`isHeading`] 
| link:#mrdocs-doc-ThrowsBlock-isList[`isList`] 
| link:#mrdocs-doc-ThrowsBlock-isMath[`isMath`] 
| link:#mrdocs-doc-ThrowsBlock-isParagraph[`isParagraph`] 
| link:#mrdocs-doc-ThrowsBlock-isParam[`isParam`] 
| link:#mrdocs-doc-ThrowsBlock-isPostcondition[`isPostcondition`] 
| link:#mrdocs-doc-ThrowsBlock-isPrecondition[`isPrecondition`] 
| link:#mrdocs-doc-ThrowsBlock-isQuote[`isQuote`] 
| link:#mrdocs-doc-ThrowsBlock-isReturns[`isReturns`] 
| link:#mrdocs-doc-ThrowsBlock-isSee[`isSee`] 
| link:#mrdocs-doc-ThrowsBlock-isTParam[`isTParam`] 
| link:#mrdocs-doc-ThrowsBlock-isTable[`isTable`] 
| link:#mrdocs-doc-ThrowsBlock-isThematicBreak[`isThematicBreak`] 
| link:#mrdocs-doc-ThrowsBlock-isThrows[`isThrows`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-InlineContainer-children[`children`] 
| Child inline elements contained here&period;
| link:#mrdocs-doc-ThrowsBlock-exception[`exception`] 
| Exception type being described&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-doc-ThrowsBlock-kind_id[`kind&lowbar;id`] 
|===

== Using Declarations

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-doc-ThrowsBlock-2constructor[`ThrowsBlock`] 
| Inherit inline container constructors&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-getAsPlainText-01[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-getAsPlainText-09[`getAsPlainText`]
| Flatten an InlineContainer to plain text&period;
| link:#mrdocs-doc-isEmpty-06[`isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-0b[`ltrim`]
| Removes leading whitespace from the first text element in the given InlineContainer&period;
| link:#mrdocs-doc-ltrim-0d[`ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0b[`rtrim`]
| Removes trailing whitespace from the last text element in the given InlineContainer&period;
| link:#mrdocs-doc-rtrim-0c[`rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-071[`trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-08[`trim`]
| Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAdmonition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isBrief() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isCode() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDefinitionList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFootnoteDefinition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isHeading() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isList() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMath() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParagraph() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPostcondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPrecondition() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isQuote() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isReturns() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isSee() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTParam() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTable() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThematicBreak() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockCommandNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isThrows() noexcept;
----

Exception type being described&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ThrowsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-doc-ReferenceInline[ReferenceInline] exception;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-doc-BlockKind[BlockKind] kind&lowbar;id;
----

Inherit inline container constructors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ThrowsBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using InlineContainer::ThrowsBlock;
----

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-InlineContainer-2constructor-03c[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-06[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0a8[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-08[mrdocs::doc::InlineContainer::InlineContainer]
| Construct an InlineContainer with a single TextInline child&period;
| link:#mrdocs-doc-InlineContainer-2constructor-07[mrdocs::doc::InlineContainer::InlineContainer]
| Move&hyphen;construct child nodes&period;
| link:#mrdocs-doc-InlineContainer-2constructor-0af[mrdocs::doc::InlineContainer::InlineContainer]
| Copy&hyphen;construct all child nodes&period;
|===
An admonishment style&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;AdmonitionKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class AdmonitionKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `none` 
| No admonishment
| `note` 
| A general note
| `tip` 
| A tip to the reader
| `important` 
| Something important
| `caution` 
| A caution admonishment
| `warning` 
| A warning admonishment
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-toString-06[`toString`]
| Return the name of the Admonish as a string&period;
|===

Enumerates the different kinds of DocComment blocks&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class BlockKind : int;
----

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-isBlockCommand[`isBlockCommand`]
| Return true if the given block kind represents a command block&period;
| link:#mrdocs-doc-toString-0eb[`toString`]
| Convert a block kind to its kebab&hyphen;case string name&period;
|===

Enumerates the different kinds of inline nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class InlineKind : int;
----

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-toString-03[`toString`]
| Convert an inline kind to its kebab&hyphen;case string&period;
|===

Parameter pass direction&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamDirection&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class ParamDirection : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `none` 
| No direction specified
| `in` 
| Parameter is passed
| `out` 
| Parameter is passed back to the caller
| `inout` 
| Parameter is passed and passed back to the caller
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-toString-0ed[`toString`]
| Return the name of the ParamDirection as a string&period;
|===

Which parts of the documentation to copy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;Parts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class Parts : int;
----

== Description

* `all`&colon; copy the brief and the description&period;
* `brief`&colon; only copy the brief&period;
* `description`&colon; only copy the description&period;

== Members

[cols="1,4"]
|===
| Name| Description
| `all` 
| Copy the brief and the description
| `brief` 
| Copy the brief
| `description` 
| Copy the description
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-doc-toString-07[`toString`]
| Return the name of the Parts as a string&period;
|===

`getAsPlainText` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

Get the plain text representation of an inline element tree&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-doc-getAsPlainText-0a[getAsPlainText](link:#mrdocs-doc-Inline[doc::Inline] const& in);
----

[.small]#link:#mrdocs-doc-getAsPlainText-0a[_» more&period;&period;&period;_]#

Flatten an InlineContainer to plain text&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-doc-getAsPlainText-09[getAsPlainText](link:#mrdocs-doc-InlineContainer[doc::InlineContainer] const& in);
----

[.small]#link:#mrdocs-doc-getAsPlainText-09[_» more&period;&period;&period;_]#

Get the plain text representation of an inline element tree&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-getAsPlainText-08[getAsPlainText](
    link:#mrdocs-doc-Inline[doc::Inline] const& in,
    std::string& dst);
----

[.small]#link:#mrdocs-doc-getAsPlainText-08[_» more&period;&period;&period;_]#

Flatten an InlineContainer to plain text&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-getAsPlainText-01[getAsPlainText](
    link:#mrdocs-doc-InlineContainer[doc::InlineContainer] const& in,
    std::string& dst);
----

[.small]#link:#mrdocs-doc-getAsPlainText-01[_» more&period;&period;&period;_]#

== Return Value

The flattened plain text&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *in*
| The input inline element&period;
| *dst*
| The output string to append to&period;
|===

Get the plain text representation of an inline element tree&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
getAsPlainText(link:#mrdocs-doc-Inline[doc::Inline] const& in);
----

== Description

This strips all formatting and returns just the text content&period;

== Return Value

The flattened plain text&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *in*
| The input inline element&period;
|===

Flatten an InlineContainer to plain text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
getAsPlainText(link:#mrdocs-doc-InlineContainer[doc::InlineContainer] const& in);
----

== Description

This concatenates all text nodes, ignoring formatting&period;

== Return Value

The flattened plain text&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *in*
| The InlineContainer to flatten&period;
|===

Get the plain text representation of an inline element tree&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
getAsPlainText(
    link:#mrdocs-doc-Inline[doc::Inline] const& in,
    std::string& dst);
----

== Description

This strips all formatting and returns just the text content&period;

== Return Value

the plain text representation of an inline element tree&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *in*
| The input inline element&period;
| *dst*
| The output string to append to&period;
|===

Flatten an InlineContainer to plain text&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
getAsPlainText(
    link:#mrdocs-doc-InlineContainer[doc::InlineContainer] const& in,
    std::string& dst);
----

== Description

This concatenates all text nodes, ignoring formatting&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *in*
| The InlineContainer to flatten&period;
| *dst*
| The output string to append to&period;
|===

Return true if the given block kind represents a command block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isBlockCommand(link:#mrdocs-doc-BlockKind[BlockKind] k) noexcept;
----

== Return Value

true if the given block kind represents a command block&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *k*
| Enumerates the different kinds of DocComment blocks&period;
|===

Determine if the inline is empty

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

Determine if the inline is empty


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-doc-isEmpty-06[isEmpty](link:#mrdocs-doc-Block[Block] const& el);
----

[.small]#link:#mrdocs-doc-isEmpty-06[_» more&period;&period;&period;_]#

Determine if the inline is empty


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-doc-isEmpty-03[isEmpty](link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& el);
----

[.small]#link:#mrdocs-doc-isEmpty-03[_» more&period;&period;&period;_]#

Determine if the inline is empty


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-doc-isEmpty-00[isEmpty](link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& el);
----

[.small]#link:#mrdocs-doc-isEmpty-00[_» more&period;&period;&period;_]#

Determine if the inline is empty

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isEmpty(link:#mrdocs-doc-Block[Block] const& el);
----

== Return Value

if the inline is empty

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| A piece of block content
|===

Determine if the inline is empty

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isEmpty(link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& el);
----

== Return Value

if the inline is empty

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| A polymorphic value&hyphen;type&period;
|===

Determine if the inline is empty

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isEmpty(link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& el);
----

== Description

This determines if the inline is considered to have no content for the purposes of trimming&period;

== Return Value

if the inline is empty

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| A polymorphic value&hyphen;type&period;
|===

`ltrim` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

Removes leading whitespace from the block&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-ltrim-0d[ltrim](link:#mrdocs-doc-Block[Block]& el);
----

[.small]#link:#mrdocs-doc-ltrim-0d[_» more&period;&period;&period;_]#

Removes leading whitespace from the first text elements


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-ltrim-01[ltrim](link:#mrdocs-doc-BlockContainer[BlockContainer]& blocks);
----

[.small]#link:#mrdocs-doc-ltrim-01[_» more&period;&period;&period;_]#

Removes leading whitespace from the first text element in the given InlineContainer&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-ltrim-0b[ltrim](link:#mrdocs-doc-InlineContainer[InlineContainer]& inlines);
----

[.small]#link:#mrdocs-doc-ltrim-0b[_» more&period;&period;&period;_]#

Removes leading whitespace from the block&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-ltrim-05[ltrim](link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;]& el);
----

[.small]#link:#mrdocs-doc-ltrim-05[_» more&period;&period;&period;_]#

Removes leading whitespace from the inline element&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-ltrim-02[ltrim](link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]& el);
----

[.small]#link:#mrdocs-doc-ltrim-02[_» more&period;&period;&period;_]#

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Block to trim&period;
| *blocks*
| The BlockContainer to trim&period;
| *inlines*
| The InlineContainer to trim&period;
|===

Removes leading whitespace from the block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
ltrim(link:#mrdocs-doc-Block[Block]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Block to trim&period;
|===

Removes leading whitespace from the first text elements

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
ltrim(link:#mrdocs-doc-BlockContainer[BlockContainer]& blocks);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *blocks*
| The BlockContainer to trim&period;
|===

Removes leading whitespace from the first text element in the given InlineContainer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
ltrim(link:#mrdocs-doc-InlineContainer[InlineContainer]& inlines);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *inlines*
| The InlineContainer to trim&period;
|===

Removes leading whitespace from the block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
ltrim(link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Polymorphic&lt;Block&gt; to trim&period;
|===

Removes leading whitespace from the inline element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
ltrim(link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Polymorphic&lt;Inline&gt; to trim&period;
|===

`rtrim` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

Removes trailing whitespace from the block&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-rtrim-0c[rtrim](link:#mrdocs-doc-Block[Block]& el);
----

[.small]#link:#mrdocs-doc-rtrim-0c[_» more&period;&period;&period;_]#

Removes trailing whitespace from the last text elements


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-rtrim-06[rtrim](link:#mrdocs-doc-BlockContainer[BlockContainer]& blocks);
----

[.small]#link:#mrdocs-doc-rtrim-06[_» more&period;&period;&period;_]#

Removes trailing whitespace from the last text element in the given InlineContainer&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-rtrim-0b[rtrim](link:#mrdocs-doc-InlineContainer[InlineContainer]& inlines);
----

[.small]#link:#mrdocs-doc-rtrim-0b[_» more&period;&period;&period;_]#

Removes trailing whitespace from the block&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-rtrim-02[rtrim](link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;]& el);
----

[.small]#link:#mrdocs-doc-rtrim-02[_» more&period;&period;&period;_]#

Removes trailing whitespace from the inline element&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-rtrim-0f[rtrim](link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]& el);
----

[.small]#link:#mrdocs-doc-rtrim-0f[_» more&period;&period;&period;_]#

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Block to trim&period;
| *blocks*
| The BlockContainer to trim&period;
| *inlines*
| The InlineContainer to trim&period;
|===

Removes trailing whitespace from the block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
rtrim(link:#mrdocs-doc-Block[Block]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Block to trim&period;
|===

Removes trailing whitespace from the last text elements

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
rtrim(link:#mrdocs-doc-BlockContainer[BlockContainer]& blocks);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *blocks*
| The BlockContainer to trim&period;
|===

Removes trailing whitespace from the last text element in the given InlineContainer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
rtrim(link:#mrdocs-doc-InlineContainer[InlineContainer]& inlines);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *inlines*
| The InlineContainer to trim&period;
|===

Removes trailing whitespace from the block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
rtrim(link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Polymorphic&lt;Block&gt; to trim&period;
|===

Removes trailing whitespace from the inline element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
rtrim(link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Polymorphic&lt;Inline&gt; to trim&period;
|===

`tag&lowbar;invoke` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

Return the ParamDirection from a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-tag_invoke-0f[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-doc-ParamDirection[ParamDirection] const kind);
----

[.small]#link:#mrdocs-doc-tag_invoke-0f[_» more&period;&period;&period;_]#

Return the Parts from a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-tag_invoke-00[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-doc-Parts[Parts] const kind);
----

[.small]#link:#mrdocs-doc-tag_invoke-00[_» more&period;&period;&period;_]#

Map an optional polymorphic block into a DOM value, producing null when empty&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-tag_invoke-0b[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Block&gt;&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-doc-tag_invoke-0b[_» more&period;&period;&period;_]#

Map the Polymorphic Block as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-tag_invoke-0a[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-doc-tag_invoke-0a[_» more&period;&period;&period;_]#

Map an optional brief block to a DOM value, yielding null when absent&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-tag_invoke-09[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[mrdocs::dom::ValueFromTag],
    link:#mrdocs-dom-Value[mrdocs::dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;BriefBlock&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-doc-tag_invoke-09[_» more&period;&period;&period;_]#

Map the Polymorphic Block to a link:#mrdocs-dom-Object[`dom&colon;&colon;Object`]&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
link:#mrdocs-doc-tag_invoke-0d[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-doc-tag_invoke-0d[_» more&period;&period;&period;_]#

Serialize a polymorphic inline node into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class IO,
    link:#mrdocs-polymorphic_storage_for[polymorphic&lowbar;storage&lowbar;for&lt;Block&gt;] InlineTy&gt;
void
link:#mrdocs-doc-tag_invoke-0c[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    IO& io,
    InlineTy const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-doc-tag_invoke-0c[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Destination value&period;
| *I*
| Optional block to convert&period;
| *domCorpus*
| Corpus context for lazy resolution&period;
| *io*
| The output parameter to receive the dom&colon;&colon;Object&period;
|===

Return the ParamDirection from a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamDirection&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-doc-ParamDirection[ParamDirection] const kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Parameter pass direction&period;
|===

Return the Parts from a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;Parts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-doc-Parts[Parts] const kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Which parts of the documentation to copy&period;
|===

Map an optional polymorphic block into a DOM value, producing null when empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Block&gt;&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Destination value&period;
| *I*
| Optional block to convert&period;
| *domCorpus*
| Corpus context for lazy resolution&period;
|===

Map the Polymorphic Block as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output parameter to receive the dom&colon;&colon;Value&period;
| *I*
| The polymorphic Block to convert&period;
| *domCorpus*
| The DomCorpus used to resolve references&period;
|===

Map an optional brief block to a DOM value, yielding null when absent&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BriefBlock&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[mrdocs::dom::ValueFromTag],
    link:#mrdocs-dom-Value[mrdocs::dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;BriefBlock&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Destination value&period;
| *I*
| Optional brief block to convert&period;
| *domCorpus*
| Corpus context for lazy references&period;
|===

Map the Polymorphic Block to a link:#mrdocs-dom-Object[`dom&colon;&colon;Object`]&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The output parameter to receive the dom&colon;&colon;Object&period;
| *I*
| The polymorphic Block to convert&period;
| *domCorpus*
| The DomCorpus used to resolve references&period;
|===

Serialize a polymorphic inline node into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class IO,
    link:#mrdocs-polymorphic_storage_for[polymorphic&lowbar;storage&lowbar;for&lt;Block&gt;] InlineTy&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    IO& io,
    InlineTy const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Description

Map the Polymorphic Inline as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;

Convert a polymorphic block storage into a DOM value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| Destination value&period;
| *I*
| Inline storage to convert&period;
| *domCorpus*
| Corpus context for lazy references&period;
|===

`toString` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;AdmonitionKind&period;hpp&gt;`

Return the name of the Admonish as a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-doc-toString-06[toString](link:#mrdocs-doc-AdmonitionKind[AdmonitionKind] kind) noexcept;
----

[.small]#link:#mrdocs-doc-toString-06[_» more&period;&period;&period;_]#

Convert a block kind to its kebab&hyphen;case string name&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-doc-toString-0eb[toString](link:#mrdocs-doc-BlockKind[BlockKind] kind) noexcept;
----

[.small]#link:#mrdocs-doc-toString-0eb[_» more&period;&period;&period;_]#

Convert an inline kind to its kebab&hyphen;case string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-doc-toString-03[toString](link:#mrdocs-doc-InlineKind[InlineKind] kind) noexcept;
----

[.small]#link:#mrdocs-doc-toString-03[_» more&period;&period;&period;_]#

Return the name of the ParamDirection as a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-doc-toString-0ed[toString](link:#mrdocs-doc-ParamDirection[ParamDirection] kind) noexcept;
----

[.small]#link:#mrdocs-doc-toString-0ed[_» more&period;&period;&period;_]#

Return the name of the Parts as a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-doc-toString-07[toString](link:#mrdocs-doc-Parts[Parts] kind) noexcept;
----

[.small]#link:#mrdocs-doc-toString-07[_» more&period;&period;&period;_]#

Return the name of the Admonish as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;AdmonitionKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-doc-AdmonitionKind[AdmonitionKind] kind) noexcept;
----

== Return Value

the name of the Admonish as a string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| An admonishment style&period;
|===

Convert a block kind to its kebab&hyphen;case string name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-doc-BlockKind[BlockKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Enumerates the different kinds of DocComment blocks&period;
|===

Convert an inline kind to its kebab&hyphen;case string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-doc-InlineKind[InlineKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Enumerates the different kinds of inline nodes&period;
|===

Return the name of the ParamDirection as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ParamDirection&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-doc-ParamDirection[ParamDirection] kind) noexcept;
----

== Return Value

the name of the ParamDirection as a string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Parameter pass direction&period;
|===

Return the name of the Parts as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;Parts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-doc-Parts[Parts] kind) noexcept;
----

== Return Value

the name of the Parts as a string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Which parts of the documentation to copy&period;
|===

Traverse a list of inlines&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class F,
    class T,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;derived&lowbar;from&lt;T, Inline&gt;
void
traverse(
    std::vector&lt;std::unique&lowbar;ptr&lt;T&gt;&gt; const& list,
    F&& f,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *list*
| The list of texts to traverse&period;
| *f*
| The function to call for each text&period;
| *args*
| Additional arguments to pass to the function&period;
|===

`trim` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

Removes leading and trailing whitespace from the block&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-trim-071[trim](link:#mrdocs-doc-Block[Block]& el);
----

[.small]#link:#mrdocs-doc-trim-071[_» more&period;&period;&period;_]#

Removes leading and trailing whitespace from the text elements


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-trim-0b[trim](link:#mrdocs-doc-BlockContainer[BlockContainer]& blocks);
----

[.small]#link:#mrdocs-doc-trim-0b[_» more&period;&period;&period;_]#

Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-trim-08[trim](link:#mrdocs-doc-InlineContainer[InlineContainer]& inlines);
----

[.small]#link:#mrdocs-doc-trim-08[_» more&period;&period;&period;_]#

Removes leading and trailing whitespace from the block&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-trim-01[trim](link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;]& el);
----

[.small]#link:#mrdocs-doc-trim-01[_» more&period;&period;&period;_]#

Removes leading and trailing whitespace from the inline element&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-doc-trim-07f[trim](link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]& el);
----

[.small]#link:#mrdocs-doc-trim-07f[_» more&period;&period;&period;_]#

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Block to trim&period;
| *blocks*
| The BlockContainer to trim&period;
| *inlines*
| The InlineContainer to trim&period;
|===

Removes leading and trailing whitespace from the block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
trim(link:#mrdocs-doc-Block[Block]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Block to trim&period;
|===

Removes leading and trailing whitespace from the text elements

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;BlockBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
trim(link:#mrdocs-doc-BlockContainer[BlockContainer]& blocks);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *blocks*
| The BlockContainer to trim&period;
|===

Removes leading and trailing whitespace from the text elements in the given InlineContainer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
trim(link:#mrdocs-doc-InlineContainer[InlineContainer]& inlines);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *inlines*
| The InlineContainer to trim&period;
|===

Removes leading and trailing whitespace from the block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
trim(link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Polymorphic&lt;Block&gt; to trim&period;
|===

Removes leading and trailing whitespace from the inline element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
trim(link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;]& el);
----

== Return Value

void

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The Polymorphic&lt;Inline&gt; to trim&period;
|===

`visit` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

Visit a block&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Block&gt; BlockTy,
    class Fn,
    class&period;&period;&period; Args&gt;
decltype(auto)
link:#mrdocs-doc-visit-0d[visit](
    BlockTy& info,
    Fn&& fn,
    Args&&&period;&period;&period; args);
----

[.small]#link:#mrdocs-doc-visit-0d[_» more&period;&period;&period;_]#

Visit an inline&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class InlineTy,
    class Fn,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;derived&lowbar;from&lt;InlineTy, Inline&gt;
decltype(auto)
link:#mrdocs-doc-visit-01[visit](
    InlineTy& el,
    Fn&& fn,
    Args&&&period;&period;&period; args);
----

[.small]#link:#mrdocs-doc-visit-01[_» more&period;&period;&period;_]#

== Return Value

The result of calling the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *info*
| The block to visit&period;
| *fn*
| The function to call for each block&period;
| *args*
| Additional arguments to pass to the function&period;
| *el*
| The inline element to visit&period;
|===

Visit a block&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Block&gt; BlockTy,
    class Fn,
    class&period;&period;&period; Args&gt;
decltype(auto)
visit(
    BlockTy& info,
    Fn&& fn,
    Args&&&period;&period;&period; args);
----

== Return Value

The result of calling the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *info*
| The block to visit&period;
| *fn*
| The function to call for each block&period;
| *args*
| Additional arguments to pass to the function&period;
|===

Visit an inline&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class InlineTy,
    class Fn,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;derived&lowbar;from&lt;InlineTy, Inline&gt;
decltype(auto)
visit(
    InlineTy& el,
    Fn&& fn,
    Args&&&period;&period;&period; args);
----

== Return Value

The result of calling the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The inline element to visit&period;
| *fn*
| The function to call for each inline&period;
| *args*
| Additional arguments to pass to the function&period;
|===

Equality delegates to the three&hyphen;way comparison&period;

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

Equality delegates to the three&hyphen;way comparison&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-doc-operator_eq-00c[operator&equals;&equals;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& rhs);
----

[.small]#link:#mrdocs-doc-operator_eq-00c[_» more&period;&period;&period;_]#

Equality delegates to the three&hyphen;way comparison&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-doc-operator_eq-01[operator&equals;&equals;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& rhs);
----

[.small]#link:#mrdocs-doc-operator_eq-01[_» more&period;&period;&period;_]#

Equality delegates to the three&hyphen;way comparison&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& rhs);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality delegates to the three&hyphen;way comparison&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& rhs);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

Three&hyphen;way comparison for polymorphic inline elements&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-doc-operator_3way-0a[operator&lt;&equals;&gt;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& rhs);
----

[.small]#link:#mrdocs-doc-operator_3way-0a[_» more&period;&period;&period;_]#

Three&hyphen;way comparison between polymorphic block wrappers&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-doc-operator_3way-016[operator&lt;&equals;&gt;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& rhs);
----

[.small]#link:#mrdocs-doc-operator_3way-016[_» more&period;&period;&period;_]#

Three&hyphen;way comparison for polymorphic inline elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Inline&gt;] const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison between polymorphic block wrappers&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Block&gt;] const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison for any described type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using mrdocs::operator&lt;&equals;&gt;;
----

== Description

Compares base classes first (in description order), then own members&period;

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-operator_3way-08-operator_3way[mrdocs::doc::operator&lt;&equals;&gt;::operator&lt;&equals;&gt;]
| Three&hyphen;way comparison operators
|===
Equality for any described type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Inline&sol;InlineBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using mrdocs::operator&equals;&equals;;
----

== Description

Needed because removing a defaulted member `operator&lt;&equals;&gt;()` also removes the implicitly&hyphen;generated `operator&equals;&equals;()`&period;

== Introduced Symbols

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-doc-operator_eq-008-operator_eq[mrdocs::doc::operator&equals;&equals;::operator&equals;&equals;]
| Equality operators
|===
Objects representing JSON&hyphen;like values&period;

== Description

This class is a variant&hyphen;like container for holding any kind of value that can be represented in JSON, with extensions for functions and &quot;safe strings&quot;&period;

The class supports the following types&colon;

* Undefined
* Null
* Boolean
* Integer
* String
* SafeString
* Array
* Object
* Function

The class provides type&hyphen;safe accessors for each type, as well as methods to check the type of the contained value&period;

Example&colon;

[,cpp]
----
{.cpp}
        dom::Value v1 = 42; // Integer
        dom::Value v2 = "Hello, World!"; // String
        dom::Value v3 = dom::Array{v1, v2}; // Array

        if (v1.isInteger())
        {
            std::cout << "v1 is an integer: " << v1.getInteger() << "\n";
        }

        if (v2.isString())
        {
            std::cout << "v2 is a string: " << v2.getString() << "\n";
        }

        if (v3.isArray())
        {
            std::cout << "v3 is an array with " << v3.getArray().size() << " elements.\n";
        }
----
== Namespaces

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-JSON[`JSON`] 
| JSON serialization helpers for DOM values&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Array[`Array`] 
| An array of values
| link:#mrdocs-dom-ArrayImpl[`ArrayImpl`] 
| Abstract array interface&period;
| link:#mrdocs-dom-DefaultArrayImpl[`DefaultArrayImpl`] 
| The default array implementation&period;
| link:#mrdocs-dom-DefaultFunctionImpl[`DefaultFunctionImpl`] 
| Function implementation that wraps a fixed&hyphen;arity callable&period;
| link:#mrdocs-dom-DefaultObjectImpl[`DefaultObjectImpl`] 
| The default Object implementation&period;
| link:#mrdocs-dom-Function[`Function`] 
| Value&hyphen;semantic wrapper over a callable exposed to the DOM layer&period;
| link:#mrdocs-dom-FunctionImpl[`FunctionImpl`] 
| Value&hyphen;semantic wrapper over a callable exposed to the DOM layer&period;
| link:#mrdocs-dom-LazyArrayImpl-03[`LazyArrayImpl`] 
| Lazy array implementation
| link:#mrdocs-dom-LazyArrayImpl-0a[`LazyArrayImpl`] 
| Lazy array implementation
| link:#mrdocs-dom-LazyObjectImpl-04[`LazyObjectImpl`] 
| Lazy object implementation&period;
| link:#mrdocs-dom-LazyObjectImpl-09[`LazyObjectImpl`] 
| Lazy object implementation&period;
| link:#mrdocs-dom-LazyObjectMapTag[`LazyObjectMapTag`] 
| Customization point tag&period;
| link:#mrdocs-dom-Object[`Object`] 
| A container of key and value pairs&period;
| link:#mrdocs-dom-ObjectImpl[`ObjectImpl`] 
| Abstract object interface&period;
| link:#mrdocs-dom-String[`String`] 
| UTF&hyphen;8 string value used by the DOM&period;
| link:#mrdocs-dom-Value[`Value`] 
| A variant container for any kind of Dom value&period;
| link:#mrdocs-dom-ValueFromTag[`ValueFromTag`] 
| Customization point tag&period;
| link:#mrdocs-dom-VariadicFunctionImpl[`VariadicFunctionImpl`] 
| Function implementation that forwards the entire Array to a callable&period;
| link:#mrdocs-dom-function_traits-056[`function&lowbar;traits`] 
| Helper traits to extract return and argument types from callables&period;
| link:#mrdocs-dom-function_traits-06[`function&lowbar;traits&lt;F&gt;`] 
| Traits specialization for functors&sol;lambdas&period;
| link:#mrdocs-dom-function_traits-0f[`function&lowbar;traits&lt;R(*)(Args&period;&period;&period;)&gt;`] 
| Traits specialization for function pointers&period;
| link:#mrdocs-dom-function_traits-04[`function&lowbar;traits&lt;R(Args&period;&period;&period;)&gt;`] 
| Traits specialization for free functions&period;
| link:#mrdocs-dom-function_traits-05f[`function&lowbar;traits&lt;R const volatile(C::*)(Args&period;&period;&period;)&gt;`] 
| Traits specialization for member functions&period;
|===

== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Kind[`Kind`] 
| The type of data in a Value&period;
|===

== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-LazyArray-04[`LazyArray`] 
| `LazyArray` overloads
| link:#mrdocs-dom-LazyObject-07[`LazyObject`] 
| `LazyObject` overloads
| link:#mrdocs-dom-TransformArray[`TransformArray`] 
| Return a new dom&colon;&colon;Array based on a transformed lazy array implementation&period;
| link:#mrdocs-dom-ValueFrom-0a[`ValueFrom`] 
| `ValueFrom` overloads
| link:#mrdocs-dom-makeInvocable[`makeInvocable`] 
| Create a Function from a fixed&hyphen;arity invocable&period;
| link:#mrdocs-dom-makeVariadicInvocable[`makeVariadicInvocable`] 
| Create a Function that receives the argument Array directly&period;
| link:#mrdocs-dom-newArray[`newArray`] 
| Return a new array using a custom implementation&period;
| link:#mrdocs-dom-newFunction[`newFunction`] 
| Return a diagnostic string&period;
| link:#mrdocs-dom-newObject[`newObject`] 
| Return a new object using a custom implementation&period;
| link:#mrdocs-dom-operator_and-0df7[`operator&amp;&amp;`] 
| Return the first dom&colon;&colon;Value that is not truthy, or the last one&period;
| link:#mrdocs-dom-operator_plus-002[`operator&plus;`] 
| Addition operators
| link:#mrdocs-dom-operator_or-0e[`operator&verbar;&verbar;`] 
| Return the first dom&colon;&colon;Value that is truthy, or the last one&period;
| link:#mrdocs-dom-stringOrNull-04[`stringOrNull`] 
| Return a non&hyphen;empty string, or a null&period;
| link:#mrdocs-dom-swap-0c[`swap`] 
| `swap` overloads
| link:#mrdocs-dom-toString-07[`toString`] 
| `toString` overloads
| link:#mrdocs-dom-operator_eq-00[`operator&equals;&equals;`] 
| Equality operators
| link:#mrdocs-dom-operator_not_eq-04[`operator!&equals;`] 
| Return the result of comparing two strings&period;
| link:#mrdocs-dom-operator_3way-07b[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

== Concepts

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-HasLazyObjectMap[`HasLazyObjectMap`] 
| Determine if `T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;
| link:#mrdocs-dom-HasLazyObjectMapWithContext[`HasLazyObjectMapWithContext`] 
| Concept to determine if a type can be mapped to a link:#mrdocs-dom-LazyObjectImpl-04[`dom&colon;&colon;LazyObjectImpl`] with a user&hyphen;provided conversion&period;
| link:#mrdocs-dom-HasLazyObjectMapWithoutContext[`HasLazyObjectMapWithoutContext`] 
| Concept to determine if a type can be mapped to a link:#mrdocs-dom-LazyObjectImpl-04[`dom&colon;&colon;LazyObjectImpl`] with a user&hyphen;provided conversion&period;
| link:#mrdocs-dom-HasStandaloneValueFrom[`HasStandaloneValueFrom`] 
| Determine if ` T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] without a context&period;
| link:#mrdocs-dom-HasValueFrom[`HasValueFrom`] 
| Determine if `T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;
| link:#mrdocs-dom-HasValueFromWithContext[`HasValueFromWithContext`] 
| Concept to determine if a type can be converted to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] with a user&hyphen;provided conversion&period;
| link:#mrdocs-dom-HasValueFromWithoutContext[`HasValueFromWithoutContext`] 
| Concept to determine if a type can be converted to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] with a user&hyphen;provided conversion&period;
| link:#mrdocs-dom-StringLikeTy[`StringLikeTy`] 
| Satisfied if StringTy is convertible to String but not a String&period;
| link:#mrdocs-dom-function_traits_convertible_to_value[`function&lowbar;traits&lowbar;convertible&lowbar;to&lowbar;value`] 
| Concept selecting callables convertible to dom&colon;&colon;Value&period;
| link:#mrdocs-dom-has_function_args_for_default_function_impl[`has&lowbar;function&lowbar;args&lowbar;for&lowbar;default&lowbar;function&lowbar;impl`] 
| Concept requiring all arguments be convertible to dom&colon;&colon;Value&period;
| link:#mrdocs-dom-has_function_traits[`has&lowbar;function&lowbar;traits`] 
| Concept true when function&lowbar;traits is defined for F&period;
| link:#mrdocs-dom-has_function_traits_for_default_function_impl[`has&lowbar;function&lowbar;traits&lowbar;for&lowbar;default&lowbar;function&lowbar;impl`] 
| Concept combining argument and return constraints for default wrapper&period;
| link:#mrdocs-dom-has_invoke_expected_result_convertible_to_dom_value[`has&lowbar;invoke&lowbar;expected&lowbar;result&lowbar;convertible&lowbar;to&lowbar;dom&lowbar;value`] 
| Concept true when F returns Expected&lt;dom&colon;&colon;Value&gt; or Expected&lt;void&gt;&period;
| link:#mrdocs-dom-has_invoke_result_convertible_to_dom_value[`has&lowbar;invoke&lowbar;result&lowbar;convertible&lowbar;to&lowbar;dom&lowbar;value`] 
| Concept true when F returns a dom&colon;&colon;Value or void&period;
| link:#mrdocs-dom-has_invoke_result_for_default_function_impl[`has&lowbar;invoke&lowbar;result&lowbar;for&lowbar;default&lowbar;function&lowbar;impl`] 
| Concept enabling default function wrapper for supported return types&period;
|===

JSON serialization helpers for DOM values&period;

== Description

This namespace wraps the platform JSON encoder&sol;decoder behavior we emulate inside MrDocs so generators can round&hyphen;trip DOM `Value` objects to text and back with predictable spacing, escaping, and cyclic&hyphen;detection rules&period;

== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-JSON-stringify[`stringify`] 
| Stringify a value as JSON
|===

Stringify a value as JSON

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
stringify(link:#mrdocs-dom-Value[dom::Value] const& value);
----

== Description

This function serialized a link:#mrdocs-dom-Value[`Value`] to a string as if `JSON&period;stringify()` had been called on it&period;

Recursive objects are identified&period;

== Return Value

A string containing valid JSON&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The value to stringify&period;
|===

An array of values

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Array final
----

== Description

Arrays are a collection of indexed values&period; They are an extension of objects with a particular relationship between integer&hyphen;keyed properties and some abstract length&hyphen;property&period; Besides, they include convenient methods to manipulate these ordered sequences of values&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Array-iterator[`iterator`] 
| A constant iterator referencing an element in an Array&period;
| link:#mrdocs-dom-Array-const_iterator[`const&lowbar;iterator`] 
| A constant iterator referencing an element in an Array&period;
| link:#mrdocs-dom-Array-const_pointer[`const&lowbar;pointer`] 
| A pointer to an element&period;
| link:#mrdocs-dom-Array-const_reference[`const&lowbar;reference`] 
| A reference to an element&period;
| link:#mrdocs-dom-Array-difference_type[`difference&lowbar;type`] 
| A signed integral type&period;
| link:#mrdocs-dom-Array-impl_type[`impl&lowbar;type`] 
| The implementation type&period;
| link:#mrdocs-dom-Array-pointer[`pointer`] 
| A pointer to an element&period;
| link:#mrdocs-dom-Array-reference[`reference`] 
| A reference to an element&period;
| link:#mrdocs-dom-Array-size_type[`size&lowbar;type`] 
| An unsigned integral type used for indexes and sizes&period;
| link:#mrdocs-dom-Array-storage_type[`storage&lowbar;type`] 
| The type of storage used by the default implementation&period;
| link:#mrdocs-dom-Array-value_type[`value&lowbar;type`] 
| The type of an element&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Array-2constructor-06[`Array`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-dom-Array-2destructor[`&#126;Array`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-dom-Array-operator_assign-0d[`operator&equals;`] 
| Assignment&period;
| link:#mrdocs-dom-Array-at[`at`] 
| Return the i&hyphen;th element&period;
| link:#mrdocs-dom-Array-back[`back`] 
| Return the last element&period;
| link:#mrdocs-dom-Array-begin[`begin`] 
| Return an iterator to the beginning of the range of elements&period;
| link:#mrdocs-dom-Array-emplace_back[`emplace&lowbar;back`] 
| Append an element to the end of the array&period;
| link:#mrdocs-dom-Array-empty[`empty`] 
| Return true if the array is empty&period;
| link:#mrdocs-dom-Array-end[`end`] 
| Return an iterator to the end of the range of elements&period;
| link:#mrdocs-dom-Array-front[`front`] 
| Return the first element&period;
| link:#mrdocs-dom-Array-get[`get`] 
| Return the i&hyphen;th element, without bounds checking&period;
| link:#mrdocs-dom-Array-impl[`impl`] 
| Return the implementation used by this object&period;
| link:#mrdocs-dom-Array-push_back[`push&lowbar;back`] 
| Append an element to the end of the array&period;
| link:#mrdocs-dom-Array-set[`set`] 
| Set the i&hyphen;th element, without bounds checking&period;
| link:#mrdocs-dom-Array-size[`size`] 
| Return the number of elements in the array&period;
| link:#mrdocs-dom-Array-swap[`swap`] 
| Swap two arrays&period;
| link:#mrdocs-dom-Array-type_key[`type&lowbar;key`] 
| Return the type key of the implementation&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-newArray[mrdocs::dom::newArray]`
| Return a new array using a custom implementation&period;
| `link:#mrdocs-dom-toString-01b[mrdocs::dom::toString]`
| Return a diagnostic string&period;
| `link:#mrdocs-dom-operator_3way-0a[mrdocs::dom::operator&lt;&equals;&gt;]`
| Compare two arrays for precedence&period;
| `link:#mrdocs-dom-operator_eq-0b[mrdocs::dom::operator&equals;&equals;]`
| Compare two arrays for equality&period;
| `link:#mrdocs-dom-swap-0f3[mrdocs::dom::swap]`
| Swap two arrays&period;
| `link:#mrdocs-dom-operator_plus-0a8[mrdocs::dom::operator&plus;]`
| 
| `link:#mrdocs-dom-operator_plus-0b[mrdocs::dom::operator&plus;]`
| 
| `link:#mrdocs-dom-operator_plus-0a2[mrdocs::dom::operator&plus;]`
| Concatenate two arrays&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-dom-LazyArray-07[`LazyArray`]
| Return a new dom&colon;&colon;Array based on a FromValue context
| link:#mrdocs-dom-LazyArray-0c[`LazyArray`]
| Return a new `dom&colon;&colon;Array` based on a lazy array implementation&period;
| link:#mrdocs-dom-TransformArray[`TransformArray`]
| Return a new dom&colon;&colon;Array based on a transformed lazy array implementation&period;
| link:#mrdocs-getParents-06[`&colon;&colon;mrdocs&colon;&colon;getParents`]
| Return a list of the parent symbols of the specified Info&period;
| link:#mrdocs-helpers-and_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;and&lowbar;fn`]
| &quot;and&quot; helper function
| link:#mrdocs-helpers-eq_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;eq&lowbar;fn`]
| &quot;eq&quot; helper function
| link:#mrdocs-helpers-ne_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;ne&lowbar;fn`]
| &quot;ne&quot; helper function
| link:#mrdocs-helpers-not_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;not&lowbar;fn`]
| &quot;not&quot; helper function
| link:#mrdocs-helpers-or_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;or&lowbar;fn`]
| &quot;or&quot; helper function
|===

A constant iterator referencing an element in an Array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;iterator = link:#mrdocs-dom-Array-iterator[iterator];
----

A pointer to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;pointer = link:#mrdocs-dom-Array-value_type[value&lowbar;type] const*;
----

A reference to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;reference = link:#mrdocs-dom-Array-value_type[value&lowbar;type];
----

== Description

This is a read&hyphen;only reference to an element&period;

A signed integral type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using difference&lowbar;type = std::ptrdiff&lowbar;t;
----

The implementation type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using impl&lowbar;type = std::shared&lowbar;ptr&lt;ArrayImpl&gt;;
----

A pointer to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using pointer = link:#mrdocs-dom-Array-value_type[value&lowbar;type] const*;
----

A reference to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reference = link:#mrdocs-dom-Array-value_type[value&lowbar;type];
----

== Description

This is a read&hyphen;only reference to an element&period;

An unsigned integral type used for indexes and sizes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = std::size&lowbar;t;
----

The type of storage used by the default implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using storage&lowbar;type = std::vector&lt;value&lowbar;type&gt;;
----

The type of an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = link:#mrdocs-dom-Value[Value];
----

A constant iterator referencing an element in an Array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class iterator;
----

== Friends

[cols="1,4"]
|===
|Name|Description

| `mrdocs::dom::operator&plus;`
| 
| `link:#mrdocs-dom-Array[mrdocs::dom::Array]`
| An array of values
|===

Constructor&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-2constructor-03[Array]();
----

[.small]#link:#mrdocs-dom-Array-2constructor-03[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-2constructor-0b[Array](link:#mrdocs-dom-Array[Array] const& other);
----

[.small]#link:#mrdocs-dom-Array-2constructor-0b[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-2constructor-0c[Array](link:#mrdocs-dom-Array[Array]&& other);
----

[.small]#link:#mrdocs-dom-Array-2constructor-0c[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-2constructor-08[Array](link:#mrdocs-dom-Array-impl_type[impl&lowbar;type] impl) noexcept;
----

[.small]#link:#mrdocs-dom-Array-2constructor-08[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-2constructor-01[Array](link:#mrdocs-dom-Array-storage_type[storage&lowbar;type] elements);
----

[.small]#link:#mrdocs-dom-Array-2constructor-01[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *elements*
| The elements to acquire&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Array();
----

== Description

Default&hyphen;constructed arrays refer to a new, empty array which is distinct from every other empty array&period;

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Array(link:#mrdocs-dom-Array[Array] const& other);
----

== Description

The newly constructed array will contain copies of the scalars in other, and references to its structured data&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Array(link:#mrdocs-dom-Array[Array]&& other);
----

== Description

Ownership of the contents is transferred to the new object&period; The moved&hyphen;from array will behave as if default&hyphen;constructed&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Array(link:#mrdocs-dom-Array-impl_type[impl&lowbar;type] impl) noexcept;
----

== Description

This constructs an array from an existing implementation, with shared ownership&period; The pointer cannot not be null&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *impl*
| The object to construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Array(link:#mrdocs-dom-Array-storage_type[storage&lowbar;type] elements);
----

== Description

Upon construction, the array will retain ownership of a shallow copy of the specified elements&period; In particular, dynamic objects will be acquired with shared ownership&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *elements*
| The elements to acquire&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Array();
----

Assignment&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-dom-Array[Array]&
link:#mrdocs-dom-Array-operator_assign-0a[operator&equals;](link:#mrdocs-dom-Array[Array] const& other) = default;
----

[.small]#link:#mrdocs-dom-Array-operator_assign-0a[_» more&period;&period;&period;_]#

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array]&
link:#mrdocs-dom-Array-operator_assign-0b[operator&equals;](link:#mrdocs-dom-Array[Array]&& other);
----

[.small]#link:#mrdocs-dom-Array-operator_assign-0b[_» more&period;&period;&period;_]#

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-dom-Array[Array]&
operator&equals;(link:#mrdocs-dom-Array[Array] const& other) = default;
----

== Description

This acquires shared ownership of the copied array, and ownership of the previous contents is released&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array]&
operator&equals;(link:#mrdocs-dom-Array[Array]&& other);
----

== Description

Ownership of the array is transferred to this, and ownership of the previous contents is released&period; The moved&hyphen;from array behaves as if default constructed&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Return the i&hyphen;th element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-value_type[value&lowbar;type]
at(link:#mrdocs-dom-Array-size_type[size&lowbar;type] i) const;
----

== Exceptions

[cols="1,4"]
|===
| Name
| Thrown on
| link:#mrdocs-Exception[`Exception`]
| `i &gt;&equals; size()`
|===

== Return Value

the i&hyphen;th element&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| An unsigned integral type used for indexes and sizes&period;
|===

Return the last element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-value_type[value&lowbar;type]
back() const;
----

== Exceptions

[cols="1,4"]
|===
| Name
| Thrown on
| link:#mrdocs-Exception[`Exception`]
| `empty()`
|===

== Return Value

the last element&period;

Return an iterator to the beginning of the range of elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-iterator[iterator]
begin() const;
----

== Return Value

an iterator to the beginning of the range of elements&period;

Append an element to the end of the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
emplace&lowbar;back(Args&&&period;&period;&period; args);
----

== Description

If the array is read&hyphen;only, an exception is thrown&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the constructor of Value&period;
|===

Return true if the array is empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
empty() const noexcept;
----

== Return Value

true if the array is empty&period;

Return an iterator to the end of the range of elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-iterator[iterator]
end() const;
----

== Return Value

an iterator to the end of the range of elements&period;

Return the first element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-value_type[value&lowbar;type]
front() const;
----

== Exceptions

[cols="1,4"]
|===
| Name
| Thrown on
| link:#mrdocs-Exception[`Exception`]
| `empty()`
|===

== Return Value

the first element&period;

Return the i&hyphen;th element, without bounds checking&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-value_type[value&lowbar;type]
get(link:#mrdocs-dom-Array-size_type[size&lowbar;type] i) const;
----

== Return Value

the i&hyphen;th element, without bounds checking&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| The zero&hyphen;based index of the element&period;
|===

Return the implementation used by this object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-impl_type[impl&lowbar;type] const&
impl() const noexcept;
----

== Return Value

the implementation used by this object&period;

Append an element to the end of the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
push&lowbar;back(link:#mrdocs-dom-Array-value_type[value&lowbar;type] value);
----

== Description

If the array is read&hyphen;only, an exception is thrown&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The type of an element&period;
|===

Set the i&hyphen;th element, without bounds checking&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
set(
    link:#mrdocs-dom-Array-size_type[size&lowbar;type] i,
    link:#mrdocs-dom-Value[Value] v);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| The zero&hyphen;based index of the element&period;
| *v*
| The value to set&period;
|===

Return the number of elements in the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-size_type[size&lowbar;type]
size() const noexcept;
----

== Return Value

the number of elements in the array&period;

Swap two arrays&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(link:#mrdocs-dom-Array[Array]& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| An array of values
|===

Return the type key of the implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
char const*
type&lowbar;key() const noexcept;
----

== Return Value

the type key of the implementation&period;

Abstract array interface&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class ArrayImpl;
----

== Description

This interface is used by Array types&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ArrayImpl-size_type[`size&lowbar;type`] 
| An unsigned integral type used for indexes and sizes&period;
| link:#mrdocs-dom-ArrayImpl-value_type[`value&lowbar;type`] 
| The type of an element&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ArrayImpl-2destructor[`&#126;ArrayImpl`] [.small]#[destructor]# [.small]#[virtual]#
| Destructor&period;
| link:#mrdocs-dom-ArrayImpl-emplace_back[`emplace&lowbar;back`]  [.small]#[virtual]#
| Append an element to the end of the array&period;
| link:#mrdocs-dom-ArrayImpl-get[`get`]  [.small]#[virtual]#
| Return the i&hyphen;th element, without bounds checking&period;
| link:#mrdocs-dom-ArrayImpl-set[`set`]  [.small]#[virtual]#
| Set the i&hyphen;th element, without bounds checking&period;
| link:#mrdocs-dom-ArrayImpl-size[`size`]  [.small]#[virtual]#
| Return the number of elements in the array&period;
| link:#mrdocs-dom-ArrayImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-dom-DefaultArrayImpl[`DefaultArrayImpl`]
| The default array implementation&period;
| link:#mrdocs-dom-LazyArrayImpl-03[`LazyArrayImpl`]
| Lazy array implementation
| link:#mrdocs-dom-LazyArrayImpl-0a[`LazyArrayImpl`]
| Lazy array implementation
|===

An unsigned integral type used for indexes and sizes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = link:#mrdocs-dom-Array-size_type[Array::size&lowbar;type];
----

The type of an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = link:#mrdocs-dom-Array-value_type[Array::value&lowbar;type];
----

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;ArrayImpl();
----

Append an element to the end of the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
emplace&lowbar;back(link:#mrdocs-dom-ArrayImpl-value_type[value&lowbar;type] value);
----

== Description

The default implementation throws an exception, making the array effectively read&hyphen;only&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The type of an element&period;
|===

Return the i&hyphen;th element, without bounds checking&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-ArrayImpl-value_type[value&lowbar;type]
get(link:#mrdocs-dom-ArrayImpl-size_type[size&lowbar;type] i) const = 0;
----

== Return Value

the i&hyphen;th element, without bounds checking&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| An unsigned integral type used for indexes and sizes&period;
|===

Set the i&hyphen;th element, without bounds checking&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
set(
    link:#mrdocs-dom-ArrayImpl-size_type[size&lowbar;type] index,
    link:#mrdocs-dom-Value[Value] value);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *index*
| An unsigned integral type used for indexes and sizes&period;
| *value*
| A variant container for any kind of Dom value&period;
|===

Return the number of elements in the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-ArrayImpl-size_type[size&lowbar;type]
size() const = 0;
----

== Return Value

the number of elements in the array&period;

Return the type key of the implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
type&lowbar;key() const noexcept;
----

== Return Value

the type key of the implementation&period;

The default array implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class DefaultArrayImpl
    : public link:#mrdocs-dom-ArrayImpl[ArrayImpl]
----

== Description

This implementation is backed by a simple vector and allows appending&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-ArrayImpl[ArrayImpl]`
| Abstract array interface&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-DefaultArrayImpl-size_type[`size&lowbar;type`] 
| An unsigned integral type used for indexes and sizes&period;
| link:#mrdocs-dom-DefaultArrayImpl-storage_type[`storage&lowbar;type`] 
| The type of storage used by the default implementation&period;
| link:#mrdocs-dom-DefaultArrayImpl-value_type[`value&lowbar;type`] 
| The type of an element&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-DefaultArrayImpl-2constructor-0b[`DefaultArrayImpl`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-dom-DefaultArrayImpl-emplace_back[`emplace&lowbar;back`]  [.small]#[virtual]#
| Append a value to the array&period;
| link:#mrdocs-dom-DefaultArrayImpl-get[`get`]  [.small]#[virtual]#
| Retrieve an element at the specified index&period;
| link:#mrdocs-dom-DefaultArrayImpl-set-03[`set`]  [.small]#[virtual]#
| `set` overloads
| link:#mrdocs-dom-DefaultArrayImpl-size[`size`]  [.small]#[virtual]#
| Return the number of stored elements&period;
| link:#mrdocs-dom-DefaultArrayImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key string for this array&period;
|===

An unsigned integral type used for indexes and sizes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = link:#mrdocs-dom-Array-size_type[Array::size&lowbar;type];
----

The type of storage used by the default implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using storage&lowbar;type = link:#mrdocs-dom-Array-storage_type[Array::storage&lowbar;type];
----

The type of an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = link:#mrdocs-dom-Array-value_type[Array::value&lowbar;type];
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Create an empty array implementation&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-DefaultArrayImpl-2constructor-06[DefaultArrayImpl]();
----

[.small]#link:#mrdocs-dom-DefaultArrayImpl-2constructor-06[_» more&period;&period;&period;_]#

Create an array populated with the given elements&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-dom-DefaultArrayImpl-2constructor-02[DefaultArrayImpl](link:#mrdocs-dom-DefaultArrayImpl-storage_type[storage&lowbar;type] elements) noexcept;
----

[.small]#link:#mrdocs-dom-DefaultArrayImpl-2constructor-02[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *elements*
| Initial contents to take ownership of&period;
|===

Create an empty array implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
DefaultArrayImpl();
----

Create an array populated with the given elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
DefaultArrayImpl(link:#mrdocs-dom-DefaultArrayImpl-storage_type[storage&lowbar;type] elements) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *elements*
| Initial contents to take ownership of&period;
|===

Append a value to the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
emplace&lowbar;back(link:#mrdocs-dom-DefaultArrayImpl-value_type[value&lowbar;type] value) override;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The type of an element&period;
|===

Retrieve an element at the specified index&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-DefaultArrayImpl-value_type[value&lowbar;type]
get(link:#mrdocs-dom-DefaultArrayImpl-size_type[size&lowbar;type] i) const override;
----

== Return Value

The type of an element&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| Index of the element to fetch&period;
|===

`set` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Replace the element at the specified index&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
link:#mrdocs-dom-DefaultArrayImpl-set-0c[set](
    link:#mrdocs-dom-DefaultArrayImpl-size_type[size&lowbar;type] i,
    link:#mrdocs-dom-Value[Value] v) override;
----

[.small]#link:#mrdocs-dom-DefaultArrayImpl-set-0c[_» more&period;&period;&period;_]#

Set the i&hyphen;th element, without bounds checking&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
link:#mrdocs-dom-ArrayImpl-set[set](
    link:#mrdocs-dom-ArrayImpl-size_type[size&lowbar;type] index,
    link:#mrdocs-dom-Value[Value] value);
----

[.small]#link:#mrdocs-dom-ArrayImpl-set[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| Index to update&period;
| *v*
| New value to store&period;
|===

Replace the element at the specified index&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
set(
    link:#mrdocs-dom-DefaultArrayImpl-size_type[size&lowbar;type] i,
    link:#mrdocs-dom-Value[Value] v) override;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| Index to update&period;
| *v*
| New value to store&period;
|===

Set the i&hyphen;th element, without bounds checking&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
set(
    link:#mrdocs-dom-ArrayImpl-size_type[size&lowbar;type] index,
    link:#mrdocs-dom-Value[Value] value);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *index*
| An unsigned integral type used for indexes and sizes&period;
| *value*
| A variant container for any kind of Dom value&period;
|===

Return the number of stored elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-DefaultArrayImpl-size_type[size&lowbar;type]
size() const override;
----

== Return Value

the number of stored elements&period;

Return the type key string for this array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
type&lowbar;key() const noexcept override;
----

== Return Value

the type key string for this array&period;

Function implementation that wraps a fixed&hyphen;arity callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
class DefaultFunctionImpl
    : public link:#mrdocs-dom-FunctionImpl[FunctionImpl]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-FunctionImpl[FunctionImpl]`
| Value&hyphen;semantic wrapper over a callable exposed to the DOM layer&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-DefaultFunctionImpl-args_type[`args&lowbar;type`] 
| Argument tuple type accepted by the callable&period;
| link:#mrdocs-dom-DefaultFunctionImpl-return_type[`return&lowbar;type`] 
| Result type produced by the callable&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-DefaultFunctionImpl-2constructor[`DefaultFunctionImpl`]         [.small]#[constructor]#
| Construct from any callable convertible to `F`&period;
| link:#mrdocs-dom-DefaultFunctionImpl-call[`call`]  [.small]#[virtual]#
| Invoke the wrapped callable with the given arguments&period;
| link:#mrdocs-dom-DefaultFunctionImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
|===

Argument tuple type accepted by the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using args&lowbar;type = function&lowbar;traits&lt;F&gt;::args&lowbar;type;
----

Result type produced by the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using return&lowbar;type = function&lowbar;traits&lt;F&gt;::return&lowbar;type;
----

Construct from any callable convertible to `F`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
DefaultFunctionImpl(U&& u);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Callable to wrap&period;
|===

Invoke the wrapped callable with the given arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
call(link:#mrdocs-dom-Array[Array] const& args) const override;
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| An array of values
|===

Return the type key of the implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
type&lowbar;key() const noexcept override;
----

== Return Value

the type key of the implementation&period;

The default Object implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class DefaultObjectImpl
    : public link:#mrdocs-dom-ObjectImpl[ObjectImpl]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-ObjectImpl[ObjectImpl]`
| Abstract object interface&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ObjectImpl-reference[`reference`] 
| A reference to an element&period;
| link:#mrdocs-dom-ObjectImpl-storage_type[`storage&lowbar;type`] 
| The type of storage used by the default implementation&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-DefaultObjectImpl-2constructor-00[`DefaultObjectImpl`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-dom-DefaultObjectImpl-exists[`exists`]  [.small]#[virtual]#
| Check whether a key exists in the object&period;
| link:#mrdocs-dom-DefaultObjectImpl-get[`get`]  [.small]#[virtual]#
| Retrieve a value by key&period;
| link:#mrdocs-dom-DefaultObjectImpl-set[`set`]  [.small]#[virtual]#
| Set a value by key&period;
| link:#mrdocs-dom-DefaultObjectImpl-size[`size`]  [.small]#[virtual]#
| Return number of elements stored&period;
| link:#mrdocs-dom-ObjectImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
| link:#mrdocs-dom-DefaultObjectImpl-visit-07[`visit`]  [.small]#[virtual]#
| `visit` overloads
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

Create an empty object implementation&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-DefaultObjectImpl-2constructor-0e[DefaultObjectImpl]() noexcept;
----

[.small]#link:#mrdocs-dom-DefaultObjectImpl-2constructor-0e[_» more&period;&period;&period;_]#

Create an object pre&hyphen;populated with entries&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-dom-DefaultObjectImpl-2constructor-0a[DefaultObjectImpl](link:#mrdocs-dom-ObjectImpl-storage_type[storage&lowbar;type] entries) noexcept;
----

[.small]#link:#mrdocs-dom-DefaultObjectImpl-2constructor-0a[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *entries*
| Key&sol;value storage to take ownership of&period;
|===

Create an empty object implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
DefaultObjectImpl() noexcept;
----

Create an object pre&hyphen;populated with entries&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
DefaultObjectImpl(link:#mrdocs-dom-ObjectImpl-storage_type[storage&lowbar;type] entries) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *entries*
| Key&sol;value storage to take ownership of&period;
|===

Check whether a key exists in the object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
exists(std::string&lowbar;view key) const override;
----

== Return Value

True if the key exists&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| Key to test&period;
|===

Retrieve a value by key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-Value[Value]
get(std::string&lowbar;view key) const override;
----

== Return Value

Stored value or undefined if absent&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| Key to search for&period;
|===

Set a value by key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
set(
    link:#mrdocs-dom-String[String] key,
    link:#mrdocs-dom-Value[Value] value) override;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| Key to set&period;
| *value*
| New value&period;
|===

Return number of elements stored&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
std::size&lowbar;t
size() const override;
----

== Return Value

number of elements stored&period;

`visit` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

Invoke the visitor for each key&sol;value pair&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
link:#mrdocs-dom-ObjectImpl-visit[visit](std::function&lt;bool(link:#mrdocs-dom-String[String], link:#mrdocs-dom-Value[Value])&gt; fn) const = 0;
----

[.small]#link:#mrdocs-dom-ObjectImpl-visit[_» more&period;&period;&period;_]#

Visit each key&sol;value pair until the visitor returns false&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
link:#mrdocs-dom-DefaultObjectImpl-visit-0a[visit](std::function&lt;bool(link:#mrdocs-dom-String[String], link:#mrdocs-dom-Value[Value])&gt; visitor) const override;
----

[.small]#link:#mrdocs-dom-DefaultObjectImpl-visit-0a[_» more&period;&period;&period;_]#

== Return Value

* `true` if the visitor returned `true` for all elements, otherwise `false`&period;
* False if visitor requested stop, otherwise true&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The visitor function&period;
| *visitor*
| Callback receiving key and value&period;
|===

Invoke the visitor for each key&sol;value pair&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
visit(std::function&lt;bool(link:#mrdocs-dom-String[String], link:#mrdocs-dom-Value[Value])&gt; fn) const = 0;
----

== Description

The visitor function must return `true` to continue iteration, or `false` to stop&period;

The visit function returns `true` if the visitor returned `true` for all elements, otherwise `false`&period;

== Return Value

`true` if the visitor returned `true` for all elements, otherwise `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The visitor function&period;
|===

Visit each key&sol;value pair until the visitor returns false&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
visit(std::function&lt;bool(link:#mrdocs-dom-String[String], link:#mrdocs-dom-Value[Value])&gt; visitor) const override;
----

== Return Value

False if visitor requested stop, otherwise true&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *visitor*
| Callback receiving key and value&period;
|===

Value&hyphen;semantic wrapper over a callable exposed to the DOM layer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Function;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Function-2constructor-0b[`Function`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-dom-Function-2destructor[`&#126;Function`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-dom-Function-operator_assign-0f[`operator&equals;`] 
| Assignment&period;
| link:#mrdocs-dom-Function-call[`call`] 
| Invoke the function&period;
| link:#mrdocs-dom-Function-impl[`impl`] 
| Return the implementation used by this object&period;
| link:#mrdocs-dom-Function-operator_call[`operator()`] 
| Invoke the function&period;
| link:#mrdocs-dom-Function-swap[`swap`] 
| Swap two objects&period;
| link:#mrdocs-dom-Function-try_invoke[`try&lowbar;invoke`] 
| Invoke the function&period;
| link:#mrdocs-dom-Function-type_key[`type&lowbar;key`] 
| Return the type key&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-newFunction[mrdocs::dom::newFunction]`
| Return a diagnostic string&period;
| `link:#mrdocs-dom-swap-0ff[mrdocs::dom::swap]`
| Swap two objects&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-dom-makeInvocable[`makeInvocable`]
| Create a Function from a fixed&hyphen;arity invocable&period;
| link:#mrdocs-dom-makeVariadicInvocable[`makeVariadicInvocable`]
| Create a Function that receives the argument Array directly&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function-2constructor-01[Function]() noexcept;
----

[.small]#link:#mrdocs-dom-Function-2constructor-01[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function-2constructor-0e6[Function](link:#mrdocs-dom-Function[Function] const& other) noexcept;
----

[.small]#link:#mrdocs-dom-Function-2constructor-0e6[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function-2constructor-0ef[Function](link:#mrdocs-dom-Function[Function]&& other) noexcept;
----

[.small]#link:#mrdocs-dom-Function-2constructor-0ef[_» more&period;&period;&period;_]#

Construct a Function from any supported callable&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires function&lowbar;traits&lowbar;convertible&lowbar;to&lowbar;value&lt;std&colon;&colon;decay&lowbar;t&lt;F&gt;&gt;
link:#mrdocs-dom-Function-2constructor-06[Function](F const& f);
----

[.small]#link:#mrdocs-dom-Function-2constructor-06[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Callable to wrap&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Function() noexcept;
----

== Description

A default&hyphen;constructed function has this equivalent implementation&colon;

[,cpp]
----
Value f()
{
    return nullptr;
}
----
Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Function(link:#mrdocs-dom-Function[Function] const& other) noexcept;
----

== Description

The newly constructed object acquires shared ownership of the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Function(link:#mrdocs-dom-Function[Function]&& other) noexcept;
----

== Description

Ownership of the function is tranferred&period; The moved&hyphen;from object behaves as if default constructed&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Construct a Function from any supported callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires function&lowbar;traits&lowbar;convertible&lowbar;to&lowbar;value&lt;std&colon;&colon;decay&lowbar;t&lt;F&gt;&gt;
Function(F const& f);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Callable to wrap&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Function();
----

Assignment&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function[Function]&
link:#mrdocs-dom-Function-operator_assign-04[operator&equals;](link:#mrdocs-dom-Function[Function] const& other) noexcept;
----

[.small]#link:#mrdocs-dom-Function-operator_assign-04[_» more&period;&period;&period;_]#

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function[Function]&
link:#mrdocs-dom-Function-operator_assign-0a[operator&equals;](link:#mrdocs-dom-Function[Function]&& other) noexcept;
----

[.small]#link:#mrdocs-dom-Function-operator_assign-0a[_» more&period;&period;&period;_]#

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function[Function]&
operator&equals;(link:#mrdocs-dom-Function[Function] const& other) noexcept;
----

== Description

This acquires shared ownership of the function&period; Ownership of the previous function is removed&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function[Function]&
operator&equals;(link:#mrdocs-dom-Function[Function]&& other) noexcept;
----

== Description

Ownership of the function is tranferred, and ownership of the previous function is released&period; The moved&hyphen;from object behaves as if default constructed&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Invoke the function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
call(link:#mrdocs-dom-Array[Array] const& args) const;
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| An array of values
|===

Return the implementation used by this object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function[impl&lowbar;type] const&
impl() const noexcept;
----

== Return Value

the implementation used by this object&period;

Invoke the function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
link:#mrdocs-dom-Value[Value]
operator()(Args&&&period;&period;&period; args) const;
----

== Return Value

The return value of the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to the function&period;
|===

Swap two objects&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(link:#mrdocs-dom-Function[Function]& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The other object&period;
|===

Invoke the function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
try&lowbar;invoke(Args&&&period;&period;&period; args) const;
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to the function&period;
|===

Return the type key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
char const*
type&lowbar;key() const noexcept;
----

== Return Value

the type key&period;

Value&hyphen;semantic wrapper over a callable exposed to the DOM layer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class FunctionImpl;
----

== Description

Abstract base for function implementations&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-FunctionImpl-2destructor[`&#126;FunctionImpl`] [.small]#[destructor]# [.small]#[virtual]#
| Destructor&period;
| link:#mrdocs-dom-FunctionImpl-call[`call`]  [.small]#[virtual]#
| Invoke the function&period;
| link:#mrdocs-dom-FunctionImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-dom-DefaultFunctionImpl[`DefaultFunctionImpl`]
| Function implementation that wraps a fixed&hyphen;arity callable&period;
| link:#mrdocs-dom-VariadicFunctionImpl[`VariadicFunctionImpl`]
| Function implementation that forwards the entire Array to a callable&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;FunctionImpl() = default;
----

Invoke the function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
call(link:#mrdocs-dom-Array[Array] const& args) const = 0;
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| An array of values
|===

Return the type key of the implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
type&lowbar;key() const noexcept;
----

== Return Value

the type key of the implementation&period;

Lazy array implementation

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class LazyArrayImpl
    : public link:#mrdocs-dom-ArrayImpl[ArrayImpl]
----

== Description

This array type is used to define a dom&colon;&colon;Array whose members are evaluated on demand as they are accessed&period;

Each member can goes through a transform function before being returned as a Value so that all types can be converted to dom&colon;&colon;Value&period;

The underlying representation of the array is a range from where the elements are extracted&period; Elements in this range should be convertible to dom&colon;&colon;Value&period;

This class is typically useful for implementing arrays that are expensive and have recursive dependencies, as these recursive dependencies can also be deferred&period;

Unlike a LazyObjectImpl, which contains an overlay object, this implementation is read&hyphen;only&period; The `set` and `emplace&lowbar;back` methods are not implemented&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-ArrayImpl[ArrayImpl]`
| Abstract array interface&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ArrayImpl-size_type[`size&lowbar;type`] 
| An unsigned integral type used for indexes and sizes&period;
| link:#mrdocs-dom-ArrayImpl-value_type[`value&lowbar;type`] 
| The type of an element&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-LazyArrayImpl-03-2constructor-07[`LazyArrayImpl`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-dom-LazyArrayImpl-03-2destructor[`&#126;LazyArrayImpl`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor&period;
| link:#mrdocs-dom-ArrayImpl-emplace_back[`emplace&lowbar;back`]  [.small]#[virtual]#
| Append an element to the end of the array&period;
| link:#mrdocs-dom-LazyArrayImpl-03-get-0d[`get`]  [.small]#[virtual]#
| `get` overloads
| link:#mrdocs-dom-ArrayImpl-set[`set`]  [.small]#[virtual]#
| Set the i&hyphen;th element, without bounds checking&period;
| link:#mrdocs-dom-LazyArrayImpl-03-size[`size`]  [.small]#[virtual]#
| Return the number of elements, computing it lazily if needed&period;
| link:#mrdocs-dom-LazyArrayImpl-03-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

Construct from a range of values&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-dom-LazyArrayImpl-03-2constructor-0d[LazyArrayImpl](R const& arr);
----

[.small]#link:#mrdocs-dom-LazyArrayImpl-03-2constructor-0d[_» more&period;&period;&period;_]#

Construct from a range and a conversion context&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-dom-LazyArrayImpl-03-2constructor-0e[LazyArrayImpl](
    R const& arr,
    Context const& ctx);
----

[.small]#link:#mrdocs-dom-LazyArrayImpl-03-2constructor-0e[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| Range to wrap lazily&period;
| *ctx*
| Context used to convert elements&period;
|===

Construct from a range of values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
LazyArrayImpl(R const& arr);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The object to copy construct from
|===

Construct from a range and a conversion context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
LazyArrayImpl(
    R const& arr,
    Context const& ctx);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| Range to wrap lazily&period;
| *ctx*
| Context used to convert elements&period;
|===

Virtual destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;LazyArrayImpl() override = default;
----

`get` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Retrieve the element at index `i`, or nil if out of range&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-dom-LazyArrayImpl-03-get-0e[get](std::size&lowbar;t i) const override;
----

[.small]#link:#mrdocs-dom-LazyArrayImpl-03-get-0e[_» more&period;&period;&period;_]#

Return the i&hyphen;th element, without bounds checking&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-ArrayImpl-value_type[value&lowbar;type]
link:#mrdocs-dom-ArrayImpl-get[get](link:#mrdocs-dom-ArrayImpl-size_type[size&lowbar;type] i) const = 0;
----

[.small]#link:#mrdocs-dom-ArrayImpl-get[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| Index of the element&period;
|===

Retrieve the element at index `i`, or nil if out of range&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-Value[dom::Value]
get(std::size&lowbar;t i) const override;
----

== Return Value

A variant container for any kind of Dom value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| Index of the element&period;
|===

Return the i&hyphen;th element, without bounds checking&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-ArrayImpl-value_type[value&lowbar;type]
get(link:#mrdocs-dom-ArrayImpl-size_type[size&lowbar;type] i) const = 0;
----

== Return Value

the i&hyphen;th element, without bounds checking&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| An unsigned integral type used for indexes and sizes&period;
|===

Return the number of elements, computing it lazily if needed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
std::size&lowbar;t
size() const noexcept override;
----

== Return Value

the number of elements, computing it lazily if needed&period;

Return the type key of the implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
type&lowbar;key() const noexcept override;
----

== Return Value

the type key of the implementation&period;

Lazy array implementation

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::random&lowbar;access&lowbar;range R,
    class Context = &sol;&ast; implementation-defined &ast;&sol;&gt;
requires HasValueFrom&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;R&gt;, Context&gt; &verbar;&verbar;
       (std&colon;&colon;invocable&lt;Context, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;R&gt;&gt; &amp;&amp;
        HasStandaloneValueFrom&lt;std&colon;&colon;invoke&lowbar;result&lowbar;t&lt;Context, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;R&gt;&gt;&gt;)
class LazyArrayImpl
    : public link:#mrdocs-dom-ArrayImpl[ArrayImpl]
----

== Description

This array type is used to define a dom&colon;&colon;Array whose members are evaluated on demand as they are accessed&period;

Each member can goes through a transform function before being returned as a Value so that all types can be converted to dom&colon;&colon;Value&period;

The underlying representation of the array is a range from where the elements are extracted&period; Elements in this range should be convertible to dom&colon;&colon;Value&period;

This class is typically useful for implementing arrays that are expensive and have recursive dependencies, as these recursive dependencies can also be deferred&period;

Unlike a LazyObjectImpl, which contains an overlay object, this implementation is read&hyphen;only&period; The `set` and `emplace&lowbar;back` methods are not implemented&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-ArrayImpl[ArrayImpl]`
| Abstract array interface&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ArrayImpl-size_type[`size&lowbar;type`] 
| An unsigned integral type used for indexes and sizes&period;
| link:#mrdocs-dom-ArrayImpl-value_type[`value&lowbar;type`] 
| The type of an element&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ArrayImpl-emplace_back[`emplace&lowbar;back`]  [.small]#[virtual]#
| Append an element to the end of the array&period;
| link:#mrdocs-dom-ArrayImpl-get[`get`]  [.small]#[virtual]#
| Return the i&hyphen;th element, without bounds checking&period;
| link:#mrdocs-dom-ArrayImpl-set[`set`]  [.small]#[virtual]#
| Set the i&hyphen;th element, without bounds checking&period;
| link:#mrdocs-dom-ArrayImpl-size[`size`]  [.small]#[virtual]#
| Return the number of elements in the array&period;
| link:#mrdocs-dom-ArrayImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
|===

Lazy object implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class LazyObjectImpl
    : public link:#mrdocs-dom-ObjectImpl[ObjectImpl]
----

== Description

This interface is used to define objects whose members are evaluated on demand as they are accessed&period;

When any of the object properties are accessed, the object link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] is constructed&period; In practice, the object never takes any memory besides the pointer to the underlying object&period;

The keys and values in the underlying object should be mapped using `tag&lowbar;invoke`&period;

This class is typically useful for implementing objects that are expensive and have recursive dependencies, as these recursive dependencies can also be deferred&period;

A context can also be stored in the object as a form to customize how the object is mapped&period; This context should be copyable and is propagated to other objects that support an overload with the same context&period;

The context can be simply a tag identifying how to map the object, or a more complex object carrying data to customize the mapping process&period;

In the latter case, because the context should be a copyable, the user might want to use a type with reference semantics&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-ObjectImpl[ObjectImpl]`
| Abstract object interface&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ObjectImpl-reference[`reference`] 
| A reference to an element&period;
| link:#mrdocs-dom-ObjectImpl-storage_type[`storage&lowbar;type`] 
| The type of storage used by the default implementation&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-LazyObjectImpl-04-2constructor-0d[`LazyObjectImpl`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-dom-LazyObjectImpl-04-2destructor[`&#126;LazyObjectImpl`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor&period;
| link:#mrdocs-dom-LazyObjectImpl-04-exists[`exists`]  [.small]#[virtual]#
| Determine if a key exists&period;
| link:#mrdocs-dom-LazyObjectImpl-04-get[`get`]  [.small]#[virtual]#
| Return the value for the specified key, or null&period;
| link:#mrdocs-dom-LazyObjectImpl-04-set[`set`]  [.small]#[virtual]#
| Insert or set the given key&sol;value pair&period;
| link:#mrdocs-dom-LazyObjectImpl-04-size[`size`]  [.small]#[virtual]#
| Return the number of properties in the object&period;
| link:#mrdocs-dom-LazyObjectImpl-04-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
| link:#mrdocs-dom-LazyObjectImpl-04-visit[`visit`]  [.small]#[virtual]#
| Invoke the visitor for each key&sol;value pair&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

Wrap an object using the default lazy mapping&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-dom-LazyObjectImpl-04-2constructor-0f[LazyObjectImpl](T const& obj)
requires HasLazyObjectMapWithoutContext&lt;T&gt;;
----

[.small]#link:#mrdocs-dom-LazyObjectImpl-04-2constructor-0f[_» more&period;&period;&period;_]#

Wrap an object using a custom mapping context&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-dom-LazyObjectImpl-04-2constructor-09[LazyObjectImpl](
    T const& obj,
    Context const& context)
requires HasLazyObjectMapWithContext&lt;T, Context&gt;;
----

[.small]#link:#mrdocs-dom-LazyObjectImpl-04-2constructor-09[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| Object providing the data&period;
| *context*
| Context that guides the mapping&period;
|===

Wrap an object using the default lazy mapping&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
LazyObjectImpl(T const& obj)
requires HasLazyObjectMapWithoutContext&lt;T&gt;;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| Object providing the data&period;
|===

Wrap an object using a custom mapping context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
LazyObjectImpl(
    T const& obj,
    Context const& context)
requires HasLazyObjectMapWithContext&lt;T, Context&gt;;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| Object providing the data&period;
| *context*
| Context that guides the mapping&period;
|===

Virtual destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;LazyObjectImpl() override = default;
----

Determine if a key exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
exists(std::string&lowbar;view key) const override;
----

== Return Value

`true` if the key exists, otherwise `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to check for existence&period;
|===

Return the value for the specified key, or null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-Value[Value]
get(std::string&lowbar;view key) const override;
----

== Return Value

The value for the specified key, or null if the key does not exist&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
|===

Insert or set the given key&sol;value pair&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
set(
    link:#mrdocs-dom-String[String] key,
    link:#mrdocs-dom-Value[Value] value) override;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
| *value*
| The value to set&period;
|===

Return the number of properties in the object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
std::size&lowbar;t
size() const override;
----

== Return Value

the number of properties in the object&period;

Return the type key of the implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
type&lowbar;key() const noexcept override;
----

== Return Value

the type key of the implementation&period;

Invoke the visitor for each key&sol;value pair&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
visit(std::function&lt;bool(link:#mrdocs-dom-String[String], link:#mrdocs-dom-Value[Value])&gt; fn) const override;
----

== Description

The visitor function must return `true` to continue iteration, or `false` to stop&period;

The visit function returns `true` if the visitor returned `true` for all elements, otherwise `false`&period;

== Return Value

`true` if the visitor returned `true` for all elements, otherwise `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The visitor function&period;
|===

Lazy object implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context = &sol;&ast; implementation-defined &ast;&sol;&gt;
requires HasLazyObjectMap&lt;T, Context&gt;
class LazyObjectImpl
    : public link:#mrdocs-dom-ObjectImpl[ObjectImpl]
----

== Description

This interface is used to define objects whose members are evaluated on demand as they are accessed&period;

When any of the object properties are accessed, the object link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] is constructed&period; In practice, the object never takes any memory besides the pointer to the underlying object&period;

The keys and values in the underlying object should be mapped using `tag&lowbar;invoke`&period;

This class is typically useful for implementing objects that are expensive and have recursive dependencies, as these recursive dependencies can also be deferred&period;

A context can also be stored in the object as a form to customize how the object is mapped&period; This context should be copyable and is propagated to other objects that support an overload with the same context&period;

The context can be simply a tag identifying how to map the object, or a more complex object carrying data to customize the mapping process&period;

In the latter case, because the context should be a copyable, the user might want to use a type with reference semantics&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-ObjectImpl[ObjectImpl]`
| Abstract object interface&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ObjectImpl-reference[`reference`] 
| A reference to an element&period;
| link:#mrdocs-dom-ObjectImpl-storage_type[`storage&lowbar;type`] 
| The type of storage used by the default implementation&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ObjectImpl-exists[`exists`]  [.small]#[virtual]#
| Determine if a key exists&period;
| link:#mrdocs-dom-ObjectImpl-get[`get`]  [.small]#[virtual]#
| Return the value for the specified key, or null&period;
| link:#mrdocs-dom-ObjectImpl-set[`set`]  [.small]#[virtual]#
| Insert or set the given key&sol;value pair&period;
| link:#mrdocs-dom-ObjectImpl-size[`size`]  [.small]#[virtual]#
| Return the number of properties in the object&period;
| link:#mrdocs-dom-ObjectImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
| link:#mrdocs-dom-ObjectImpl-visit[`visit`]  [.small]#[virtual]#
| Invoke the visitor for each key&sol;value pair&period;
|===

Customization point tag&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct LazyObjectMapTag;
----

== Description

This tag type is used by the class link:#mrdocs-dom-LazyObjectImpl-04[`dom&colon;&colon;LazyObjectImpl`] to select overloads of `tag&lowbar;invoke`&period;

[NOTE]
====
This type is empty&semi; it has no members&period;

====

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-tag_invoke-013[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a FriendInfo to a dom&colon;&colon;Object with deferred name lookup&period;
| link:#mrdocs-tag_invoke-033[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map the Polymorphic Symbol to a link:#mrdocs-dom-Object[`dom&colon;&colon;Object`]&period;
| link:#mrdocs-tag_invoke-035[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map the SourceInfo to a lazy DOM object&period;
| link:#mrdocs-tag_invoke-036[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Generic tag&lowbar;invoke for any described type with DomCorpus context&period;
| link:#mrdocs-tag_invoke-04[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a TemplateInfo to a dom&colon;&colon;Object with computed specialization kind&period;
| link:#mrdocs-tag_invoke-056[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a Name to a dom&colon;&colon;Object via visit&hyphen;based polymorphic dispatch&period;
| link:#mrdocs-tag_invoke-057[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Generic tag&lowbar;invoke for described types without context&period;
| link:#mrdocs-tag_invoke-05a[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a BaseInfo to a dom&colon;&colon;Object with computed access booleans&period;
| link:#mrdocs-tag_invoke-088[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a Symbol to a dom&colon;&colon;Object with computed extraction properties&period;
| link:#mrdocs-tag_invoke-09b5[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map an ExprInfo to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;
| link:#mrdocs-tag_invoke-0db[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a RecordSymbol to a dom&colon;&colon;Object with computed defaultAccess&period;
| link:#mrdocs-tag_invoke-0fa[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map an ArrayType to a dom&colon;&colon;Object with split bounds properties&period;
| link:#mrdocs-doc-tag_invoke-0d[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;tag&lowbar;invoke`]
| Map the Polymorphic Block to a link:#mrdocs-dom-Object[`dom&colon;&colon;Object`]&period;
|===

== See Also

link:#mrdocs-dom-LazyObjectImpl-04[`dom&colon;&colon;LazyObjectImpl`] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1895r0.pdf[ tag&lowbar;invoke&colon; A general pattern for supporting customisable functions]

A container of key and value pairs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Object final
----

== Description

Objects are a collection of properties, which are equivalent to key&hyphen;value pairs&period; Property values can be any type, including other Objects, allowing for the creation of arbitrarily complex data structures&period;

An Object is a non&hyphen;primitive (or reference) type, meaning that they are not copied when assigned or passed as a parameter&period; Instead, the reference is copied, and the original value is shared&period;

These reference types are modeled after JavaScript &quot;Objects&quot;&period; All non&hyphen;primitive types (Object types) are derived from Object in JavaScript&period; This means types such as Array and Function represent a relevant selection of built&hyphen;in types that would derive from Object in JavaScript&period;

== Properties

[,cpp]
----
Objects are a collection of properties, which are
equivalent to key-value pairs. There are two
kinds of properties:

@li Data properties: Associates a key with a value.
@li Accessor properties: Associates a key with
    one of two accessor functions (`get` and `set`),
    which are used to retrieve or set the value.

The internal representation of objects can determine
how properties are stored and the type of properties
being represented.

Properties can also be enumerable or non-enumerable.
An enumerable property is one that is iterated by
the `visit` function. Non-enumerable properties can
only be accessed by name with the `get` and `set`
functions.
----
== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Object-value_type[`value&lowbar;type`] 
| The type of an element&period;
| link:#mrdocs-dom-Object-const_pointer[`const&lowbar;pointer`] 
| A pointer to an element&period;
| link:#mrdocs-dom-Object-const_reference[`const&lowbar;reference`] 
| A reference to an element&period;
| link:#mrdocs-dom-Object-difference_type[`difference&lowbar;type`] 
| A signed integral type&period;
| link:#mrdocs-dom-Object-impl_type[`impl&lowbar;type`] 
| The implementation type&period;
| link:#mrdocs-dom-Object-pointer[`pointer`] 
| A pointer to an element&period;
| link:#mrdocs-dom-Object-reference[`reference`] 
| A reference to an element&period;
| link:#mrdocs-dom-Object-size_type[`size&lowbar;type`] 
| An unsigned integral type used for indexes and sizes&period;
| link:#mrdocs-dom-Object-storage_type[`storage&lowbar;type`] 
| The type of storage used by the default implementation&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Object-2constructor-03b[`Object`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-dom-Object-2destructor[`&#126;Object`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-dom-Object-operator_assign-0a[`operator&equals;`] 
| Assignment&period;
| link:#mrdocs-dom-Object-at[`at`] 
| Return the element at a given index&period;
| link:#mrdocs-dom-Object-empty[`empty`] 
| Return true if the container is empty&period;
| link:#mrdocs-dom-Object-exists[`exists`] 
| Return true if a key exists&period;
| link:#mrdocs-dom-Object-get[`get`] 
| Return the element with the specified key
| link:#mrdocs-dom-Object-impl[`impl`] 
| Return the implementation used by this object&period;
| link:#mrdocs-dom-Object-set[`set`] 
| Set or replace the value for a given key&period;
| link:#mrdocs-dom-Object-size[`size`] 
| Return the number of elements&period;
| link:#mrdocs-dom-Object-swap[`swap`] 
| Swap two objects&period;
| link:#mrdocs-dom-Object-type_key[`type&lowbar;key`] 
| Return the type key&period;
| link:#mrdocs-dom-Object-visit-0fa[`visit`] 
| Invoke the visitor for each key&sol;value pair
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-toString-018[mrdocs::dom::toString]`
| Return a diagnostic string&period;
| `link:#mrdocs-dom-operator_3way-075[mrdocs::dom::operator&lt;&equals;&gt;]`
| Compare two objects for precedence&period;
| `link:#mrdocs-dom-operator_eq-01[mrdocs::dom::operator&equals;&equals;]`
| Compare two objects for equality&period;
| `link:#mrdocs-dom-swap-08[mrdocs::dom::swap]`
| Swap two objects&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-dom-LazyObject-0d5[`LazyObject`]
| Return a new dom&colon;&colon;Object based on a transformed lazy array implementation&period;
| link:#mrdocs-dom-LazyObject-0dd[`LazyObject`]
| Return a new dom&colon;&colon;Object based on a lazy object implementation&period;
| link:#mrdocs-dom-newObject[`newObject`]
| Return a new object using a custom implementation&period;
| link:#mrdocs-createFrame-04[`&colon;&colon;mrdocs&colon;&colon;createFrame`]
| Create child data objects&period;
|===

A pointer to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;pointer = link:#mrdocs-dom-Object-pointer[pointer];
----

A reference to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;reference = link:#mrdocs-dom-Object-reference[reference];
----

== Description

This is a read&hyphen;only reference to an element&period;

A signed integral type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using difference&lowbar;type = std::ptrdiff&lowbar;t;
----

The implementation type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using impl&lowbar;type = std::shared&lowbar;ptr&lt;ObjectImpl&gt;;
----

A pointer to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using pointer = link:#mrdocs-dom-Object-value_type[value&lowbar;type] const*;
----

A reference to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reference = link:#mrdocs-dom-Object-value_type[value&lowbar;type];
----

== Description

This is a read&hyphen;only reference to an element&period;

An unsigned integral type used for indexes and sizes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = std::size&lowbar;t;
----

The type of storage used by the default implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using storage&lowbar;type = std::vector&lt;value&lowbar;type&gt;;
----

The type of an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct value&lowbar;type;
----

== Description

Elements of this container are key and value pairs where the key is a string&period; This type is a copyable, movable value type&period;

Constructor&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object-2constructor-02[Object]();
----

[.small]#link:#mrdocs-dom-Object-2constructor-02[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object-2constructor-03a[Object](link:#mrdocs-dom-Object[Object] const& other) noexcept;
----

[.small]#link:#mrdocs-dom-Object-2constructor-03a[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object-2constructor-0e[Object](link:#mrdocs-dom-Object[Object]&& other);
----

[.small]#link:#mrdocs-dom-Object-2constructor-0e[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-dom-Object-2constructor-0c[Object](link:#mrdocs-dom-Object-impl_type[impl&lowbar;type] impl) noexcept;
----

[.small]#link:#mrdocs-dom-Object-2constructor-0c[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-dom-Object-2constructor-05[Object](link:#mrdocs-dom-Object-storage_type[storage&lowbar;type] list);
----

[.small]#link:#mrdocs-dom-Object-2constructor-05[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *list*
| The initial list of values&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Object();
----

== Description

Default&hyphen;constructed objects refer to a new, empty container which is distinct from every other empty container&period;

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Object(link:#mrdocs-dom-Object[Object] const& other) noexcept;
----

== Description

The newly constructed object will contain copies of the scalars in other, and references to its structured data&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Object(link:#mrdocs-dom-Object[Object]&& other);
----

== Description

Ownership of the contents is transferred to the new object&period; The moved&hyphen;from object will behave as if default&hyphen;constructed&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Object(link:#mrdocs-dom-Object-impl_type[impl&lowbar;type] impl) noexcept;
----

== Description

This constructs an object from an existing implementation, with shared ownership&period; The pointer cannot not be null&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *impl*
| The object to construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Object(link:#mrdocs-dom-Object-storage_type[storage&lowbar;type] list);
----

== Description

Upon construction, the object will retain ownership of a shallow copy of the specified list&period; In particular, dynamic objects will be acquired with shared ownership&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *list*
| The initial list of values&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
&#126;Object() = default;
----

Assignment&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[Object]&
link:#mrdocs-dom-Object-operator_assign-07[operator&equals;](link:#mrdocs-dom-Object[Object] const& other) noexcept;
----

[.small]#link:#mrdocs-dom-Object-operator_assign-07[_» more&period;&period;&period;_]#

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[Object]&
link:#mrdocs-dom-Object-operator_assign-09[operator&equals;](link:#mrdocs-dom-Object[Object]&& other);
----

[.small]#link:#mrdocs-dom-Object-operator_assign-09[_» more&period;&period;&period;_]#

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[Object]&
operator&equals;(link:#mrdocs-dom-Object[Object] const& other) noexcept;
----

== Description

Shared ownership and copies of elements in others are acquired by this&period; Ownership of the previous contents is released&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[Object]&
operator&equals;(link:#mrdocs-dom-Object[Object]&& other);
----

== Description

Ownership of the object is transferred to this, and ownership of the previous contents is released&period; The moved&hyphen;from object behaves as if default constructed&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Return the element at a given index&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]
at(std::string&lowbar;view i) const;
----

== Return Value

The value at the specified index, or null if the index is out of range&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| The index&period;
|===

Return true if the container is empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
empty() const;
----

== Return Value

true if the container is empty&period;

Return true if a key exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
exists(std::string&lowbar;view key) const;
----

== Return Value

`true` if the key exists, otherwise `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to check for existence&period;
|===

Return the element with the specified key

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]
get(std::string&lowbar;view key) const;
----

== Return Value

The value for the specified key, or null if the key does not exist&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
|===

Return the implementation used by this object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object-impl_type[impl&lowbar;type] const&
impl() const noexcept;
----

== Return Value

the implementation used by this object&period;

Set or replace the value for a given key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
set(
    link:#mrdocs-dom-String[String] key,
    link:#mrdocs-dom-Value[Value] value) const;
----

== Description

This function inserts a new key or changes the value for the existing key if it is already present&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
| *value*
| The value to set&period;
|===

Return the number of elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
size() const;
----

== Return Value

the number of elements&period;

Swap two objects&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(link:#mrdocs-dom-Object[Object]& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| A container of key and value pairs&period;
|===

Return the type key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
char const*
type&lowbar;key() const noexcept;
----

== Return Value

the type key&period;

Invoke the visitor for each key&sol;value pair

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

Invoke the visitor for each key&sol;value pair


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires std&colon;&colon;invocable&lt;F, String, Value&gt; &amp;&amp;
        std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;invoke&lowbar;result&lowbar;t&lt;F, String, Value&gt;, bool&gt;
bool
link:#mrdocs-dom-Object-visit-08[visit](F&& fn) const;
----

[.small]#link:#mrdocs-dom-Object-visit-08[_» more&period;&period;&period;_]#

Invoke the visitor for each key&sol;value pair


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires std&colon;&colon;invocable&lt;F, String, Value&gt; &amp;&amp;
        mrdocs&colon;&colon;detail&colon;&colon;isExpected&lt;std&colon;&colon;invoke&lowbar;result&lowbar;t&lt;F, String, Value&gt;&gt;
link:#mrdocs-Expected-0a[Expected&lt;void, std::invoke&lowbar;result&lowbar;t&lt;F, String, Value&gt;::error&lowbar;type&gt;]
link:#mrdocs-dom-Object-visit-0f1[visit](F&& fn) const;
----

[.small]#link:#mrdocs-dom-Object-visit-0f1[_» more&period;&period;&period;_]#

Invoke the visitor for each key&sol;value pair


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires std&colon;&colon;invocable&lt;F, String, Value&gt; &amp;&amp;
        std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;invoke&lowbar;result&lowbar;t&lt;F, String, Value&gt;, void&gt;
void
link:#mrdocs-dom-Object-visit-06[visit](F&& fn) const;
----

[.small]#link:#mrdocs-dom-Object-visit-06[_» more&period;&period;&period;_]#

== Return Value

* `true` if the visitor returned `true` for all elements, otherwise `false`&period;
* `void` if the visitor returned did not return an error for any element, otherwise `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The visitor function&period;
|===

Invoke the visitor for each key&sol;value pair

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires std&colon;&colon;invocable&lt;F, String, Value&gt; &amp;&amp;
        std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;invoke&lowbar;result&lowbar;t&lt;F, String, Value&gt;, bool&gt;
bool
visit(F&& fn) const;
----

== Description

The visitor function must return `true` to continue iteration, or `false` to stop iteration early&period;

== Return Value

`true` if the visitor returned `true` for all elements, otherwise `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The visitor function&period;
|===

Invoke the visitor for each key&sol;value pair

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires std&colon;&colon;invocable&lt;F, String, Value&gt; &amp;&amp;
        mrdocs&colon;&colon;detail&colon;&colon;isExpected&lt;std&colon;&colon;invoke&lowbar;result&lowbar;t&lt;F, String, Value&gt;&gt;
link:#mrdocs-Expected-0a[Expected&lt;void, std::invoke&lowbar;result&lowbar;t&lt;F, String, Value&gt;::error&lowbar;type&gt;]
visit(F&& fn) const;
----

== Description

The visitor function must return `void` to continue iteration, or an `Unexpected&lt;E&gt;` to stop iteration early&period;

If an error is returned, the iteration stops and the error is returned from this function&period;

== Return Value

* `void` if the visitor returned did not return an error for any element, otherwise `E`&period;
* `void` if the visitor returned did not return an error for any element, otherwise `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The visitor function&period;
|===

Invoke the visitor for each key&sol;value pair

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires std&colon;&colon;invocable&lt;F, String, Value&gt; &amp;&amp;
        std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;invoke&lowbar;result&lowbar;t&lt;F, String, Value&gt;, void&gt;
void
visit(F&& fn) const;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The visitor function&period;
|===

Abstract object interface&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class ObjectImpl;
----

== Description

This interface is used by Object types&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ObjectImpl-reference[`reference`] 
| A reference to an element&period;
| link:#mrdocs-dom-ObjectImpl-storage_type[`storage&lowbar;type`] 
| The type of storage used by the default implementation&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-ObjectImpl-2destructor[`&#126;ObjectImpl`] [.small]#[destructor]# [.small]#[virtual]#
| Destructor&period;
| link:#mrdocs-dom-ObjectImpl-exists[`exists`]  [.small]#[virtual]#
| Determine if a key exists&period;
| link:#mrdocs-dom-ObjectImpl-get[`get`]  [.small]#[virtual]#
| Return the value for the specified key, or null&period;
| link:#mrdocs-dom-ObjectImpl-set[`set`]  [.small]#[virtual]#
| Insert or set the given key&sol;value pair&period;
| link:#mrdocs-dom-ObjectImpl-size[`size`]  [.small]#[virtual]#
| Return the number of properties in the object&period;
| link:#mrdocs-dom-ObjectImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
| link:#mrdocs-dom-ObjectImpl-visit[`visit`]  [.small]#[virtual]#
| Invoke the visitor for each key&sol;value pair&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-dom-DefaultObjectImpl[`DefaultObjectImpl`]
| The default Object implementation&period;
| link:#mrdocs-dom-LazyObjectImpl-04[`LazyObjectImpl`]
| Lazy object implementation&period;
| link:#mrdocs-dom-LazyObjectImpl-09[`LazyObjectImpl`]
| Lazy object implementation&period;
|===

A reference to an element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reference = link:#mrdocs-dom-Object-reference[Object::reference];
----

== Description

This is a read&hyphen;only reference to an element&period;

The type of storage used by the default implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using storage&lowbar;type = link:#mrdocs-dom-Object-storage_type[Object::storage&lowbar;type];
----

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;ObjectImpl();
----

Determine if a key exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
exists(std::string&lowbar;view key) const;
----

== Return Value

`true` if the key exists, otherwise `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to check for existence&period;
|===

Return the value for the specified key, or null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-Value[Value]
get(std::string&lowbar;view key) const = 0;
----

== Return Value

The value for the specified key, or null if the key does not exist&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
|===

Insert or set the given key&sol;value pair&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
set(
    link:#mrdocs-dom-String[String] key,
    link:#mrdocs-dom-Value[Value] value) = 0;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
| *value*
| The value to set&period;
|===

Return the number of properties in the object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
std::size&lowbar;t
size() const = 0;
----

== Return Value

the number of properties in the object&period;

Return the type key of the implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
type&lowbar;key() const noexcept;
----

== Return Value

the type key of the implementation&period;

Invoke the visitor for each key&sol;value pair&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
bool
visit(std::function&lt;bool(link:#mrdocs-dom-String[String], link:#mrdocs-dom-Value[Value])&gt; fn) const = 0;
----

== Description

The visitor function must return `true` to continue iteration, or `false` to stop&period;

The visit function returns `true` if the visitor returned `true` for all elements, otherwise `false`&period;

== Return Value

`true` if the visitor returned `true` for all elements, otherwise `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The visitor function&period;
|===

UTF&hyphen;8 string value used by the DOM&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class String final
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-String-2constructor-0b0[`String`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-dom-String-2destructor[`&#126;String`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-dom-String-operator_assign-0f[`operator&equals;`] 
| Assignment&period;
| link:#mrdocs-dom-String-c_str[`c&lowbar;str`] 
| Return the string&period;
| link:#mrdocs-dom-String-data[`data`] 
| Return the string&period;
| link:#mrdocs-dom-String-empty[`empty`] 
| Return true if the string is empty&period;
| link:#mrdocs-dom-String-get[`get`] 
| Return the string&period;
| link:#mrdocs-dom-String-size[`size`] 
| Return the size&period;
| link:#mrdocs-dom-String-str[`str`] 
| Return the string&period;
| link:#mrdocs-dom-String-swap[`swap`] 
| Swap two strings&period;
| link:#mrdocs-dom-String-2conversion[`operator std::string&lowbar;view`] 
| Return the string&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-operator_plus-06b[mrdocs::dom::operator&plus;]`
| 
| `link:#mrdocs-dom-operator_plus-00c[mrdocs::dom::operator&plus;]`
| 
| `link:#mrdocs-dom-operator_plus-0c8[mrdocs::dom::operator&plus;]`
| Concatenate two strings&period;
| `link:#mrdocs-dom-operator_3way-00[mrdocs::dom::operator&lt;&equals;&gt;]`
| Return the result of comparing two strings&period;
| `link:#mrdocs-dom-operator_not_eq-0e[mrdocs::dom::operator!&equals;]`
| Return the result of comparing two strings&period;
| `link:#mrdocs-dom-operator_eq-04[mrdocs::dom::operator&equals;&equals;]`
| Return the result of comparing two strings&period;
| `link:#mrdocs-dom-operator_3way-01[mrdocs::dom::operator&lt;&equals;&gt;]`
| Return the result of comparing two strings&period;
| `link:#mrdocs-dom-operator_not_eq-03[mrdocs::dom::operator!&equals;]`
| Return the result of comparing two strings&period;
| `link:#mrdocs-dom-operator_eq-0e[mrdocs::dom::operator&equals;&equals;]`
| Return the result of comparing two strings&period;
| `link:#mrdocs-dom-swap-06[mrdocs::dom::swap]`
| Swap two strings&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-01b5[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert an explicit kind to its string form&period;
| link:#mrdocs-toString-01bf[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert a reference kind to its string representation&period;
| link:#mrdocs-toString-05[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert a storage class kind to its string form&period;
| link:#mrdocs-toString-082[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert ExplicitInfo to a string&period;
| link:#mrdocs-toString-093[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert a noexcept kind to its string form&period;
| link:#mrdocs-toString-09c[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert a cv&sol;ref qualifier kind to its string form&period;
| link:#mrdocs-toString-0d3[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert access specifier to its string form&period;
| link:#mrdocs-toString-0dc[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert NoexceptInfo to a string&period;
| link:#mrdocs-toString-0e[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert a TypeKind to its string representation&period;
| link:#mrdocs-toString-0f4[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert an auto&hyphen;kind to its spelling&period;
| link:#mrdocs-toString-0fa[`&colon;&colon;mrdocs&colon;&colon;toString`]
| Convert a constexpr&sol;consteval specifier kind to a string&period;
| link:#mrdocs-doc-toString-03[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;toString`]
| Convert an inline kind to its kebab&hyphen;case string&period;
| link:#mrdocs-doc-toString-06[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;toString`]
| Return the name of the Admonish as a string&period;
| link:#mrdocs-doc-toString-07[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;toString`]
| Return the name of the Parts as a string&period;
| link:#mrdocs-doc-toString-0eb[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;toString`]
| Convert a block kind to its kebab&hyphen;case string name&period;
| link:#mrdocs-doc-toString-0ed[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;toString`]
| Return the name of the ParamDirection as a string&period;
|===

Constructor&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-dom-String-2constructor-0b9[String]() noexcept = default;
----

[.small]#link:#mrdocs-dom-String-2constructor-0b9[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String-2constructor-09[String](link:#mrdocs-dom-String[String] const& other) noexcept;
----

[.small]#link:#mrdocs-dom-String-2constructor-09[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-dom-String-2constructor-0a[String](link:#mrdocs-dom-String[String]&& other) noexcept;
----

[.small]#link:#mrdocs-dom-String-2constructor-0a[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String-2constructor-02[String](std::string&lowbar;view sv);
----

[.small]#link:#mrdocs-dom-String-2constructor-02[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-dom-StringLikeTy[StringLikeTy] StringLike&gt;
link:#mrdocs-dom-String-2constructor-00[String](StringLike const& s);
----

[.small]#link:#mrdocs-dom-String-2constructor-00[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
constexpr
link:#mrdocs-dom-String-2constructor-0ccd[String](char const(& str)[N]);
----

[.small]#link:#mrdocs-dom-String-2constructor-0ccd[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String-2constructor-0cce[String](
    char const* str,
    std::size&lowbar;t len);
----

[.small]#link:#mrdocs-dom-String-2constructor-0cce[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| The string to construct with&period; A copy of this string is made&period;
| *s*
| The string to construct with&period; A copy of this string is made&period;
| *str*
| A null&hyphen;terminated string&period; If the string is not null&hyphen;terminated, the result is undefined&period;
| *len*
| The length of the string&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
String() noexcept = default;
----

== Description

Default constructed strings have a zero size, and include a null terminator&period;

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
String(link:#mrdocs-dom-String[String] const& other) noexcept;
----

== Description

The newly constructed string acquries shared ownership of the string referenced by other&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
String(link:#mrdocs-dom-String[String]&& other) noexcept;
----

== Description

Ownership of the string is transferred to the newly constructed string&period; The moved&hyphen;from string behaves as if default constructed&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
String(std::string&lowbar;view sv);
----

== Description

This function constructs a new string from the buffer pointed to by `sv`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| The string to construct with&period; A copy of this string is made&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-dom-StringLikeTy[StringLikeTy] StringLike&gt;
String(StringLike const& s);
----

== Description

This function constructs a new string from s, which must be convertible to `std&colon;&colon;string&lowbar;view`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to construct with&period; A copy of this string is made&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
constexpr
String(char const(& str)[N]);
----

== Description

This function constructs a string literal which references the buffer pointed to by `str`&period; Ownership is not transferred&semi; the lifetime of the buffer must extend until the string is destroyed, otherwise the behavior is undefined&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| A null&hyphen;terminated string&period; If the string is not null&hyphen;terminated, the result is undefined&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
String(
    char const* str,
    std::size&lowbar;t len);
----

== Description

This function constructs a new string from the string pointed to by `str` of length `len`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to construct with&period; A copy of this string is made&period;
| *len*
| The length of the string&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;String() noexcept;
----

Assignment&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[String]&
link:#mrdocs-dom-String-operator_assign-01[operator&equals;](link:#mrdocs-dom-String[String] const& other) noexcept;
----

[.small]#link:#mrdocs-dom-String-operator_assign-01[_» more&period;&period;&period;_]#

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[String]&
link:#mrdocs-dom-String-operator_assign-05[operator&equals;](link:#mrdocs-dom-String[String]&& other) noexcept;
----

[.small]#link:#mrdocs-dom-String-operator_assign-05[_» more&period;&period;&period;_]#

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[String]&
operator&equals;(link:#mrdocs-dom-String[String] const& other) noexcept;
----

== Description

This acquires shared ownership of the string referenced by other&period; Ownership of the previously referenced string is released&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[String]&
operator&equals;(link:#mrdocs-dom-String[String]&& other) noexcept;
----

== Description

This transfers ownership of the string referenced by other to this&period; Ownership of the previously referened string is released&period; After the assignment, the moved&hyphen;from string behaves as if default constructed&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Return the string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
char const*
c&lowbar;str() const noexcept;
----

== Description

The pointed&hyphen;to character buffer returned by this function is always null&hyphen;terminated&period;

== Return Value

the string&period;

Return the string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
char const*
data() const noexcept;
----

== Description

The pointed&hyphen;to character buffer returned by this function is always null&hyphen;terminated&period;

== Return Value

the string&period;

Return true if the string is empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
empty() const noexcept;
----

== Return Value

true if the string is empty&period;

Return the string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
get() const noexcept;
----

== Return Value

the string&period;

Return the size&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
size() const noexcept;
----

== Return Value

the size&period;

Return the string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
str() const noexcept;
----

== Return Value

the string&period;

Swap two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(link:#mrdocs-dom-String[String]& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The other string&period;
|===

Return the string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
operator std::string&lowbar;view() const noexcept;
----

== Return Value

the string&period;

A variant container for any kind of Dom value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Value;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Value-2constructor-0e0[`Value`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-dom-Value-2destructor[`&#126;Value`] [.small]#[destructor]#
| Destroy the contained value, releasing owned storage&period;
| link:#mrdocs-dom-Value-operator_assign-0a[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-dom-Value-empty[`empty`] 
| Return if an Array or Object is empty&period;
| link:#mrdocs-dom-Value-exists[`exists`] 
| Return true if a key exists&period;
| link:#mrdocs-dom-Value-get-07[`get`] 
| `get` overloads
| link:#mrdocs-dom-Value-getArray-0d[`getArray`] 
| Return the array&period;
| link:#mrdocs-dom-Value-getBool[`getBool`] 
| Return the underlying boolean value&period;
| link:#mrdocs-dom-Value-getFunction[`getFunction`] 
| Return the function&period;
| link:#mrdocs-dom-Value-getInteger[`getInteger`] 
| Return the underlying integer value&period;
| link:#mrdocs-dom-Value-getObject[`getObject`] 
| Return the object&period;
| link:#mrdocs-dom-Value-getString[`getString`] 
| Return the underlying string value&period;
| link:#mrdocs-dom-Value-isArray[`isArray`] 
| Return true if this is an array&period;
| link:#mrdocs-dom-Value-isBoolean[`isBoolean`] 
| Return true if this is a boolean&period;
| link:#mrdocs-dom-Value-isFunction[`isFunction`] 
| Return true if this is a function&period;
| link:#mrdocs-dom-Value-isInteger[`isInteger`] 
| Return true if this is an integer&period;
| link:#mrdocs-dom-Value-isNull[`isNull`] 
| Return true if this is null&period;
| link:#mrdocs-dom-Value-isObject[`isObject`] 
| Return true if this is an object&period;
| link:#mrdocs-dom-Value-isSafeString[`isSafeString`] 
| Return true if this is a safe string&period;
| link:#mrdocs-dom-Value-isString[`isString`] 
| Return true if this is a string&period;
| link:#mrdocs-dom-Value-isTruthy[`isTruthy`] 
| Determine if a value is truthy
| link:#mrdocs-dom-Value-isUndefined[`isUndefined`] 
| Return true if this is undefined&period;
| link:#mrdocs-dom-Value-kind[`kind`] 
| Return the type of value contained&period;
| link:#mrdocs-dom-Value-lookup[`lookup`] 
| Lookup a sequence of keys&period;
| link:#mrdocs-dom-Value-operator_call[`operator()`] 
| Invoke the function&period;
| link:#mrdocs-dom-Value-set[`set`] 
| Set or replace the value for a given key&period;
| link:#mrdocs-dom-Value-size[`size`] 
| Return if an Array or Object is empty&period;
| link:#mrdocs-dom-Value-swap[`swap`] 
| Swap two values&period;
| link:#mrdocs-dom-Value-type_key[`type&lowbar;key`] 
| Return the type key of the value&period;
| link:#mrdocs-dom-Value-2conversion-0c[`operator std::string`] 
| Return the string&period;
| link:#mrdocs-dom-Value-2conversion-05[`operator bool`] 
| Determine if a value is truthy
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-Value-arr_[`arr&lowbar;`] [.small]#[variant member]#
| Array payload&semi; shared with lazy arrays&period;
| link:#mrdocs-dom-Value-b_[`b&lowbar;`] [.small]#[variant member]#
| Boolean payload when the value kind is `Boolean`&period;
| link:#mrdocs-dom-Value-fn_[`fn&lowbar;`] [.small]#[variant member]#
| Callable payload used by template helpers&period;
| link:#mrdocs-dom-Value-i_[`i&lowbar;`] [.small]#[variant member]#
| Integer payload when the value kind is `Integer`&period;
| link:#mrdocs-dom-Value-obj_[`obj&lowbar;`] [.small]#[variant member]#
| Object payload&semi; shared with lazy objects&period;
| link:#mrdocs-dom-Value-str_[`str&lowbar;`] [.small]#[variant member]#
| UTF&hyphen;8 string or safe&hyphen;string payload&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-toString-02[mrdocs::dom::toString]`
| Return value as a string&period;
| `link:#mrdocs-dom-operator_and-0de[mrdocs::dom::operator&amp;&amp;]`
| 
| `link:#mrdocs-dom-operator_and-06[mrdocs::dom::operator&amp;&amp;]`
| 
| `link:#mrdocs-dom-operator_and-0df0[mrdocs::dom::operator&amp;&amp;]`
| Return the first dom&colon;&colon;Value that is not truthy, or the last one&period;
| `link:#mrdocs-dom-operator_or-09[mrdocs::dom::operator&verbar;&verbar;]`
| 
| `link:#mrdocs-dom-operator_or-0d[mrdocs::dom::operator&verbar;&verbar;]`
| 
| `link:#mrdocs-dom-operator_or-05[mrdocs::dom::operator&verbar;&verbar;]`
| Return the first dom&colon;&colon;Value that is truthy, or the last one&period;
| `link:#mrdocs-dom-operator_plus-064[mrdocs::dom::operator&plus;]`
| 
| `link:#mrdocs-dom-operator_plus-01[mrdocs::dom::operator&plus;]`
| 
| `link:#mrdocs-dom-operator_plus-0cf[mrdocs::dom::operator&plus;]`
| Add or concatenate two values&period;
| `link:#mrdocs-dom-operator_3way-0c[mrdocs::dom::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mrdocs-dom-operator_3way-02[mrdocs::dom::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mrdocs-dom-operator_3way-09[mrdocs::dom::operator&lt;&equals;&gt;]`
| Compare two values for inequality&period;
| `link:#mrdocs-dom-operator_eq-07[mrdocs::dom::operator&equals;&equals;]`
| Compare two values for equality&period;
| `link:#mrdocs-dom-swap-01[mrdocs::dom::swap]`
| Swap two values&period;
| `link:#mrdocs-safeString-0e[mrdocs::safeString]`
| Create a wrapper for a safe string&period;
| `link:#mrdocs-dom-Object[mrdocs::dom::Object]`
| A container of key and value pairs&period;
| `link:#mrdocs-dom-Array[mrdocs::dom::Array]`
| An array of values
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-dom-ValueFrom-05[`ValueFrom`]
| Convert an object of type `T` to `dom&colon;&colon;Value` with a context
| link:#mrdocs-dom-ValueFrom-0d[`ValueFrom`]
| Convert an object of type `T` to `dom&colon;&colon;Value`&period;
| link:#mrdocs-dom-stringOrNull-01[`stringOrNull`]
| Return a non&hyphen;empty string, or a null&period;
| link:#mrdocs-dom-stringOrNull-0d[`stringOrNull`]
| Return a non&hyphen;empty string, or a null&period;
| link:#mrdocs-dom-stringOrNull-0e[`stringOrNull`]
| Return a non&hyphen;empty string, or a null&period;
| link:#mrdocs-dom-JSON-stringify[`JSON&colon;&colon;stringify`]
| Stringify a value as JSON
| link:#mrdocs-isEmpty[`&colon;&colon;mrdocs&colon;&colon;isEmpty`]
| Determine if a value is empty
| link:#mrdocs-safeString-04[`&colon;&colon;mrdocs&colon;&colon;safeString`]
| Return a DOM string ensuring special characters are escaped&period;
| link:#mrdocs-safeString-0b[`&colon;&colon;mrdocs&colon;&colon;safeString`]
| Mark an existing string&hyphen;like value as safe to emit without escaping&period;
| link:#mrdocs-helpers-detag_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;detag&lowbar;fn`]
| &quot;detag&quot; helper function
| link:#mrdocs-helpers-increment_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;increment&lowbar;fn`]
| &quot;increment&quot; helper function
| link:#mrdocs-helpers-or_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;or&lowbar;fn`]
| &quot;or&quot; helper function
| link:#mrdocs-helpers-relativize_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;relativize&lowbar;fn`]
| &quot;relativize&quot; helper function
| link:#mrdocs-helpers-select_fn[`&colon;&colon;mrdocs&colon;&colon;helpers&colon;&colon;select&lowbar;fn`]
| &quot;select&quot; helper function
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

Construct an undefined value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-0d2[Value]() noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-0d2[_» more&period;&period;&period;_]#

Copy&hyphen;construct from another value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-0345b[Value](link:#mrdocs-dom-Value[Value] const& other);
----

[.small]#link:#mrdocs-dom-Value-2constructor-0345b[_» more&period;&period;&period;_]#

Move&hyphen;construct from another value, leaving it undefined&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-04[Value](link:#mrdocs-dom-Value[Value]&& other) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-04[_» more&period;&period;&period;_]#

Construct an array value, taking ownership of the elements&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-0a[Value](link:#mrdocs-dom-Array[Array] arr) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-0a[_» more&period;&period;&period;_]#

Construct a function value that can be invoked by templates&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-099[Value](link:#mrdocs-dom-Function[Function] fn) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-099[_» more&period;&period;&period;_]#

Construct an empty value with the specified kind&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-098[Value](link:#mrdocs-dom-Kind[dom::Kind] kind) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-098[_» more&period;&period;&period;_]#

Construct an object value, taking ownership of the members&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-020[Value](link:#mrdocs-dom-Object[Object] obj) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-020[_» more&period;&period;&period;_]#

Construct a string or safe&hyphen;string value, taking ownership&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-0ef[Value](link:#mrdocs-dom-String[String] str) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-0ef[_» more&period;&period;&period;_]#

Construct a single&hyphen;character string value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-05[Value](char c) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-05[_» more&period;&period;&period;_]#

Construct an integer value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-00[Value](int64&lowbar;t v) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-00[_» more&period;&period;&period;_]#

Construct a null value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-0c[Value](std::nullptr&lowbar;t v) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-0c[_» more&period;&period;&period;_]#

Construct an array value from raw storage&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-02d0[Value](link:#mrdocs-dom-Array-storage_type[Array::storage&lowbar;type] elements);
----

[.small]#link:#mrdocs-dom-Value-2constructor-02d0[_» more&period;&period;&period;_]#

Construct a string value from a C string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value-2constructor-0f[Value](char const* s);
----

[.small]#link:#mrdocs-dom-Value-2constructor-0f[_» more&period;&period;&period;_]#

Construct an integer value from a floating&hyphen;point number by truncation&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::floating&lowbar;point T&gt;
link:#mrdocs-dom-Value-2constructor-09a[Value](T v) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-09a[_» more&period;&period;&period;_]#

Construct an integer value from an integral type other than `bool` or `char`&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::integral T&gt;
requires (!std&colon;&colon;same&lowbar;as&lt;T, bool&gt;) &amp;&amp;
        (!std&colon;&colon;same&lowbar;as&lt;T, char&gt;)
link:#mrdocs-dom-Value-2constructor-0d7[Value](T v) noexcept;
----

[.small]#link:#mrdocs-dom-Value-2constructor-0d7[_» more&period;&period;&period;_]#

Construct a boolean value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;String&gt; Boolean&gt;
link:#mrdocs-dom-Value-2constructor-0345f[Value](Boolean const& b);
----

[.small]#link:#mrdocs-dom-Value-2constructor-0345f[_» more&period;&period;&period;_]#

Construct a function value from a callable object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires function&lowbar;traits&lowbar;convertible&lowbar;to&lowbar;value&lt;F&gt;
link:#mrdocs-dom-Value-2constructor-06[Value](F const& f);
----

[.small]#link:#mrdocs-dom-Value-2constructor-06[_» more&period;&period;&period;_]#

Construct from `Optional`, using `Undefined` when empty&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;Value, T&gt;
link:#mrdocs-dom-Value-2constructor-08[Value](link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& opt);
----

[.small]#link:#mrdocs-dom-Value-2constructor-08[_» more&period;&period;&period;_]#

Construct from `std&colon;&colon;optional`, using `Undefined` when empty&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;Value, T&gt;
link:#mrdocs-dom-Value-2constructor-02d8[Value](std::optional&lt;T&gt; const& opt);
----

[.small]#link:#mrdocs-dom-Value-2constructor-02d8[_» more&period;&period;&period;_]#

Construct a string value from a string literal&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
link:#mrdocs-dom-Value-2constructor-03b[Value](char const(& sz)[N]);
----

[.small]#link:#mrdocs-dom-Value-2constructor-03b[_» more&period;&period;&period;_]#

Construct an undefined value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value() noexcept;
----

Copy&hyphen;construct from another value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-dom-Value[Value] const& other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Move&hyphen;construct from another value, leaving it undefined&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-dom-Value[Value]&& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Construct an array value, taking ownership of the elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-dom-Array[Array] arr) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The object to construct from
|===

Construct a function value that can be invoked by templates&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-dom-Function[Function] fn) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The object to construct from
|===

Construct an empty value with the specified kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-dom-Kind[dom::Kind] kind) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The object to construct from
|===

Construct an object value, taking ownership of the members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-dom-Object[Object] obj) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| The object to construct from
|===

Construct a string or safe&hyphen;string value, taking ownership&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-dom-String[String] str) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The object to construct from
|===

Construct a single&hyphen;character string value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(char c) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| The value to construct from
|===

Construct an integer value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(int64&lowbar;t v) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The object to construct from
|===

Construct a null value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(std::nullptr&lowbar;t v) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The object to construct from
|===

Construct an array value from raw storage&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-dom-Array-storage_type[Array::storage&lowbar;type] elements);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *elements*
| The object to construct from
|===

Construct a string value from a C string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(char const* s);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The value to construct from
|===

Construct an integer value from a floating&hyphen;point number by truncation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::floating&lowbar;point T&gt;
Value(T v) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The object to construct from
|===

Construct an integer value from an integral type other than `bool` or `char`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::integral T&gt;
requires (!std&colon;&colon;same&lowbar;as&lt;T, bool&gt;) &amp;&amp;
        (!std&colon;&colon;same&lowbar;as&lt;T, char&gt;)
Value(T v) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The object to construct from
|===

Construct a boolean value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;String&gt; Boolean&gt;
Value(Boolean const& b);
----

== Description

Construct a string value from any `String`&hyphen;convertible type&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *b*
| The object to copy construct from
|===

Construct a function value from a callable object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires function&lowbar;traits&lowbar;convertible&lowbar;to&lowbar;value&lt;F&gt;
Value(F const& f);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The object to copy construct from
|===

Construct from `Optional`, using `Undefined` when empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;Value, T&gt;
Value(link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& opt);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *opt*
| The object to copy construct from
|===

Construct from `std&colon;&colon;optional`, using `Undefined` when empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;Value, T&gt;
Value(std::optional&lt;T&gt; const& opt);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *opt*
| The object to copy construct from
|===

Construct a string value from a string literal&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
Value(char const(& sz)[N]);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sz*
| The value to construct from
|===

Destroy the contained value, releasing owned storage&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Value();
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

Copy&hyphen;assign from another value, replacing the stored payload&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]&
link:#mrdocs-dom-Value-operator_assign-0e[operator&equals;](link:#mrdocs-dom-Value[Value] const& other);
----

[.small]#link:#mrdocs-dom-Value-operator_assign-0e[_» more&period;&period;&period;_]#

Move&hyphen;assign from another value, leaving it undefined&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]&
link:#mrdocs-dom-Value-operator_assign-0d[operator&equals;](link:#mrdocs-dom-Value[Value]&& other) noexcept;
----

[.small]#link:#mrdocs-dom-Value-operator_assign-0d[_» more&period;&period;&period;_]#

Copy&hyphen;assign from another value, replacing the stored payload&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]&
operator&equals;(link:#mrdocs-dom-Value[Value] const& other);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move&hyphen;assign from another value, leaving it undefined&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]&
operator&equals;(link:#mrdocs-dom-Value[Value]&& other) noexcept;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Return if an Array or Object is empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
empty() const;
----

== Return Value

if an Array or Object is empty&period;

Return true if a key exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
exists(std::string&lowbar;view key) const;
----

== Return Value

`true` if the key exists, otherwise `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to check for existence&period;
|===

`get` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

Return the element at a given index&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-dom-Value-get-0a[get](std::size&lowbar;t i) const;
----

[.small]#link:#mrdocs-dom-Value-get-0a[_» more&period;&period;&period;_]#

Return the element for a given key&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-dom-Value-get-06[get](std::string&lowbar;view key) const;
----

[.small]#link:#mrdocs-dom-Value-get-06[_» more&period;&period;&period;_]#

Return the element at a given index or key&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-dom-Value-get-0dd[get](link:#mrdocs-dom-Value[dom::Value] const& i) const;
----

[.small]#link:#mrdocs-dom-Value-get-0dd[_» more&period;&period;&period;_]#

Return the element for a given key&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;std::string&lowbar;view&gt; S&gt;
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-dom-Value-get-0dc[get](S const& key) const;
----

[.small]#link:#mrdocs-dom-Value-get-0dc[_» more&period;&period;&period;_]#

== Return Value

* The value at the specified index, or a Value of type
* The value for the specified key, or a Value of type link:#mrdocs-dom-Kind[`Kind&colon;&colon;Undefined`] if the key does not exist&period;
* The value for the specified key, or a Value of type link:#mrdocs-dom-Kind[`Kind&colon;&colon;Undefined`] if the key does not exist&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| The index&period;
| *key*
| The key&period;
|===

Return the element at a given index&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
get(std::size&lowbar;t i) const;
----

== Return Value

The value at the specified index, or a Value of type

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| The index&period;
|===

Return the element for a given key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
get(std::string&lowbar;view key) const;
----

== Description

If the Value is not an object, or the key is not found, a Value of type link:#mrdocs-dom-Kind[`Kind&colon;&colon;Undefined`] is returned&period;

== Return Value

The value for the specified key, or a Value of type link:#mrdocs-dom-Kind[`Kind&colon;&colon;Undefined`] if the key does not exist&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
|===

Return the element at a given index or key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
get(link:#mrdocs-dom-Value[dom::Value] const& i) const;
----

== Return Value

the element at a given index or key&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| A variant container for any kind of Dom value&period;
|===

Return the element for a given key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;std::string&lowbar;view&gt; S&gt;
link:#mrdocs-dom-Value[dom::Value]
get(S const& key) const;
----

== Description

If the Value is not an object, or the key is not found, a Value of type link:#mrdocs-dom-Kind[`Kind&colon;&colon;Undefined`] is returned&period;

== Return Value

The value for the specified key, or a Value of type link:#mrdocs-dom-Kind[`Kind&colon;&colon;Undefined`] if the key does not exist&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
|===

Return the array&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

Return the array&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array] const&
link:#mrdocs-dom-Value-getArray-02[getArray]() const;
----

[.small]#link:#mrdocs-dom-Value-getArray-02[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array]&
link:#mrdocs-dom-Value-getArray-06[getArray]();
----

[.small]#link:#mrdocs-dom-Value-getArray-06[_» more&period;&period;&period;_]#

== Exceptions

[cols="1,4"]
|===
| Name
| Thrown on
| link:#mrdocs-Exception[`Exception`]
| `! isArray()`
|===

Return the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array] const&
getArray() const;
----

== Exceptions

[cols="1,4"]
|===
| Name
| Thrown on
| link:#mrdocs-Exception[`Exception`]
| `! isArray()`
|===

== Return Value

the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array]&
getArray();
----

== Return Value

An array of values

Return the underlying boolean value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
getBool() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isBoolean()`

====

== Return Value

the underlying boolean value&period;

Return the function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function[Function] const&
getFunction() const;
----

== Exceptions

[cols="1,4"]
|===
| Name
| Thrown on
| link:#mrdocs-Exception[`Exception`]
| `! isFunction()`
|===

== Return Value

the function&period;

Return the underlying integer value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
int64&lowbar;t
getInteger() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isInteger()`

====

== Return Value

the underlying integer value&period;

Return the object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[Object] const&
getObject() const;
----

== Exceptions

[cols="1,4"]
|===
| Name
| Thrown on
| link:#mrdocs-Exception[`Exception`]
| `! isObject()`
|===

== Return Value

the object&period;

Return the underlying string value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[String] const&
getString() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isString()`

====

== Return Value

the underlying string value&period;

Return true if this is an array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isArray() const noexcept;
----

== Return Value

true if this is an array&period;

Return true if this is a boolean&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isBoolean() const noexcept;
----

== Return Value

true if this is a boolean&period;

Return true if this is a function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isFunction() const noexcept;
----

== Return Value

true if this is a function&period;

Return true if this is an integer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isInteger() const noexcept;
----

== Return Value

true if this is an integer&period;

Return true if this is null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isNull() const noexcept;
----

== Return Value

true if this is null&period;

Return true if this is an object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isObject() const noexcept;
----

== Return Value

true if this is an object&period;

Return true if this is a safe string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isSafeString() const noexcept;
----

== Return Value

true if this is a safe string&period;

Return true if this is a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isString() const noexcept;
----

== Return Value

true if this is a string&period;

Determine if a value is truthy

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isTruthy() const noexcept;
----

== Description

A value is truthy if it is a boolean and is true, a number and not zero, or an non&hyphen;empty string, array or object&period;

== Return Value

`true` if the value is truthy, `false` otherwise

Return true if this is undefined&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isUndefined() const noexcept;
----

== Return Value

true if this is undefined&period;

Return the type of value contained&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Kind[dom::Kind]
kind() const noexcept;
----

== Return Value

the type of value contained&period;

Lookup a sequence of keys&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
lookup(std::string&lowbar;view keys) const;
----

== Description

This function is equivalent to calling `get` multiple times, once for each key in the sequence of dot&hyphen;separated keys&period;

== Return Value

The value at the end of the sequence, or a Value of type link:#mrdocs-dom-Kind[`Kind&colon;&colon;Undefined`] if any key is not found&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *keys*
| The dot&hyphen;separated sequence of keys&period;
|===

Invoke the function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
link:#mrdocs-dom-Value[Value]
operator()(Args&&&period;&period;&period; args) const;
----

== Description

If the Value is not an object, or the key is not found, a Value of type link:#mrdocs-dom-Kind[`Kind&colon;&colon;Undefined`] is returned&period;

== Return Value

Another instance of the object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to the function&period;
|===

Set or replace the value for a given key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
set(
    link:#mrdocs-dom-String[String] const& key,
    link:#mrdocs-dom-Value[Value] const& value);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key&period;
| *value*
| The value to set&period;
|===

Return if an Array or Object is empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
size() const;
----

== Return Value

if an Array or Object is empty&period;

Swap two values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(link:#mrdocs-dom-Value[Value]& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| A variant container for any kind of Dom value&period;
|===

Return the type key of the value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
char const*
type&lowbar;key() const noexcept;
----

== Return Value

the type key of the value&period;

Return the string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
operator std::string() const noexcept;
----

== Return Value

the string&period;

Determine if a value is truthy

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
operator bool() const noexcept;
----

== Description

A value is truthy if it is a boolean and is true, a number and not zero, or an non&hyphen;empty string, array or object&period;

== Return Value

`true` if the value is truthy, `false` otherwise

Array payload&semi; shared with lazy arrays&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array] arr&lowbar;;
----

Boolean payload when the value kind is `Boolean`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool b&lowbar; = &lcub;false&rcub;;
----

Callable payload used by template helpers&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function[Function] fn&lowbar;;
----

Integer payload when the value kind is `Integer`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
int64&lowbar;t i&lowbar;;
----

Object payload&semi; shared with lazy objects&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[Object] obj&lowbar;;
----

UTF&hyphen;8 string or safe&hyphen;string payload&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[String] str&lowbar;;
----

Customization point tag&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ValueFromTag;
----

== Description

This tag type is used by the function link:#mrdocs-dom-ValueFrom-0a[`dom&colon;&colon;ValueFrom`] to select overloads of `tag&lowbar;invoke`&period;

[NOTE]
====
This type is empty&semi; it has no members&period;

====

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-tag_invoke-004[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Convert a NoexceptInfo to a DOM value&period;
| link:#mrdocs-tag_invoke-00c[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a Type into a DOM value&period;
| link:#mrdocs-tag_invoke-011[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a polymorphic template argument into a DOM value&period;
| link:#mrdocs-tag_invoke-012[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a FundamentalTypeKind into a DOM value&period;
| link:#mrdocs-tag_invoke-026[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Return the UsingClass as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;
| link:#mrdocs-tag_invoke-02c[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize an optional polymorphic name into a DOM value&period;
| link:#mrdocs-tag_invoke-030[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a polymorphic name into a DOM value&period;
| link:#mrdocs-tag_invoke-037[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Return the AccessKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;
| link:#mrdocs-tag_invoke-03a[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize an optional polymorphic type into a DOM value&period;
| link:#mrdocs-tag_invoke-055[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Convert SymbolID to dom&colon;&colon;Value object in the DOM using Corpus
| link:#mrdocs-tag_invoke-05b[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize template info into a DOM value&period;
| link:#mrdocs-tag_invoke-05c[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Convert SymbolID pointers to dom&colon;&colon;Value or null&period;
| link:#mrdocs-tag_invoke-06e[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Return the ConstexprKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;
| link:#mrdocs-tag_invoke-06f[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize the auto kind into a DOM value&period;
| link:#mrdocs-tag_invoke-076[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Generic ValueFrom for any described enum&period;
| link:#mrdocs-tag_invoke-079[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a name into a DOM value&period;
| link:#mrdocs-tag_invoke-086[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize source locations into a DOM value&period;
| link:#mrdocs-tag_invoke-087[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a base description into a DOM value&period;
| link:#mrdocs-tag_invoke-08d[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a TypeKind into a DOM value&period;
| link:#mrdocs-tag_invoke-090[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize the argument to a DOM value&period;
| link:#mrdocs-tag_invoke-091[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a template parameter into a DOM value&period;
| link:#mrdocs-tag_invoke-0945[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Return the Param as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;
| link:#mrdocs-tag_invoke-094c[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Generic ValueFrom for any described compound type&period;
| link:#mrdocs-tag_invoke-09b7[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize an optional template info into a DOM value&period;
| link:#mrdocs-tag_invoke-0a[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a polymorphic type into a DOM value&period;
| link:#mrdocs-tag_invoke-0b[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Return the ReferenceKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;
| link:#mrdocs-tag_invoke-0c9[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map an operator kind to a DOM value (its underlying integer)&period;
| link:#mrdocs-tag_invoke-0cb[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Return the ExplicitInfo as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;
| link:#mrdocs-tag_invoke-0d2[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Return the StorageClassKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;
| link:#mrdocs-tag_invoke-0da[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Generic ValueFrom for described enums, with context&period;
| link:#mrdocs-tag_invoke-0e4[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Convert an optional SymbolID to dom&colon;&colon;Value or null&period;
| link:#mrdocs-tag_invoke-0e8[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a vector of parameters to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;
| link:#mrdocs-tag_invoke-0f1[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Convert SymbolID to dom&colon;&colon;Value string in the DOM using toBase16
| link:#mrdocs-tag_invoke-0f6[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map an ExprInfo to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;
| link:#mrdocs-tag_invoke-0f77[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Map a QualifierKind into a DOM value&period;
| link:#mrdocs-tag_invoke-0f7d[`&colon;&colon;mrdocs&colon;&colon;tag&lowbar;invoke`]
| Serialize a polymorphic template parameter&period;
| link:#mrdocs-doc-tag_invoke-00[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;tag&lowbar;invoke`]
| Return the Parts from a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;
| link:#mrdocs-doc-tag_invoke-09[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;tag&lowbar;invoke`]
| Map an optional brief block to a DOM value, yielding null when absent&period;
| link:#mrdocs-doc-tag_invoke-0a[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;tag&lowbar;invoke`]
| Map the Polymorphic Block as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;
| link:#mrdocs-doc-tag_invoke-0b[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;tag&lowbar;invoke`]
| Map an optional polymorphic block into a DOM value, producing null when empty&period;
| link:#mrdocs-doc-tag_invoke-0c[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;tag&lowbar;invoke`]
| Serialize a polymorphic inline node into a DOM value&period;
| link:#mrdocs-doc-tag_invoke-0f[`&colon;&colon;mrdocs&colon;&colon;doc&colon;&colon;tag&lowbar;invoke`]
| Return the ParamDirection from a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;
|===

== See Also

link:#mrdocs-dom-ValueFrom-0a[`dom&colon;&colon;ValueFrom`] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1895r0.pdf[ tag&lowbar;invoke&colon; A general pattern for supporting customisable functions]

Function implementation that forwards the entire Array to a callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
class VariadicFunctionImpl
    : public link:#mrdocs-dom-FunctionImpl[FunctionImpl]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-FunctionImpl[FunctionImpl]`
| Value&hyphen;semantic wrapper over a callable exposed to the DOM layer&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-VariadicFunctionImpl-args_type[`args&lowbar;type`] 
| Argument tuple type accepted by the callable&period;
| link:#mrdocs-dom-VariadicFunctionImpl-return_type[`return&lowbar;type`] 
| Result type produced by the callable&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-VariadicFunctionImpl-2constructor[`VariadicFunctionImpl`]         [.small]#[constructor]#
| Construct from any callable convertible to `F`&period;
| link:#mrdocs-dom-VariadicFunctionImpl-call[`call`]  [.small]#[virtual]#
| Invoke the wrapped callable with the full argument array&period;
| link:#mrdocs-dom-VariadicFunctionImpl-type_key[`type&lowbar;key`]  [.small]#[virtual]#
| Return the type key of the implementation&period;
|===

Argument tuple type accepted by the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using args&lowbar;type = function&lowbar;traits&lt;F&gt;::args&lowbar;type;
----

Result type produced by the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using return&lowbar;type = function&lowbar;traits&lt;F&gt;::return&lowbar;type;
----

Construct from any callable convertible to `F`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
VariadicFunctionImpl(U&& u);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Callable to wrap&period;
|===

Invoke the wrapped callable with the full argument array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
call(link:#mrdocs-dom-Array[Array] const& args) const override;
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| An array of values
|===

Return the type key of the implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
type&lowbar;key() const noexcept override;
----

== Return Value

the type key of the implementation&period;

Helper traits to extract return and argument types from callables&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename F&gt;
struct function&lowbar;traits;
----

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-dom-function_traits-06[`function&lowbar;traits`]
| Traits specialization for functors&sol;lambdas&period;
|===

Traits specialization for functors&sol;lambdas&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename F&gt;
requires requires &lcub; &amp;F&colon;&colon;operator()&semi; &rcub;
struct link:#mrdocs-dom-function_traits-056[function&lowbar;traits]&lt;F&gt;
    : link:#mrdocs-dom-function_traits-056[function&lowbar;traits&lt;decltype(&amp;F&colon;&colon;operator)&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-dom-function_traits-056[function&lowbar;traits&lt;decltype(&amp;F&colon;&colon;operator)&gt;]`
| Helper traits to extract return and argument types from callables&period;
|===

Traits specialization for function pointers&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename R,
    typename&period;&period;&period; Args&gt;
struct link:#mrdocs-dom-function_traits-056[function&lowbar;traits]&lt;R(*)(Args&period;&period;&period;)&gt;;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-function_traits-0f-args_type[`args&lowbar;type`] 
| Tuple of argument types accepted by the callable&period;
| link:#mrdocs-dom-function_traits-0f-return_type[`return&lowbar;type`] 
| Result type of the callable&period;
|===

Tuple of argument types accepted by the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using args&lowbar;type = std::tuple&lt;Args&period;&period;&period;&gt;;
----

Result type of the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using return&lowbar;type = R;
----

Traits specialization for free functions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename R,
    typename&period;&period;&period; Args&gt;
struct link:#mrdocs-dom-function_traits-056[function&lowbar;traits]&lt;R(Args&period;&period;&period;)&gt;;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-function_traits-04-args_type[`args&lowbar;type`] 
| Tuple of argument types accepted by the callable&period;
| link:#mrdocs-dom-function_traits-04-return_type[`return&lowbar;type`] 
| Result type of the callable&period;
|===

Tuple of argument types accepted by the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using args&lowbar;type = std::tuple&lt;Args&period;&period;&period;&gt;;
----

Result type of the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using return&lowbar;type = R;
----

Traits specialization for member functions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename C,
    typename R,
    typename&period;&period;&period; Args&gt;
struct link:#mrdocs-dom-function_traits-056[function&lowbar;traits]&lt;R const volatile(C::*)(Args&period;&period;&period;)&gt;;
----

== Description

Traits specialization for const member functions&period;

Traits specialization for volatile member functions&period;

Traits specialization for const volatile member functions&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-dom-function_traits-05f-args_type[`args&lowbar;type`] 
| Tuple of argument types accepted by the callable&period;
| link:#mrdocs-dom-function_traits-05f-return_type[`return&lowbar;type`] 
| Result type of the callable&period;
|===

Tuple of argument types accepted by the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using args&lowbar;type = std::tuple&lt;Args&period;&period;&period;&gt;;
----

Result type of the callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using return&lowbar;type = R;
----

The type of data in a Value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Kind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class Kind : int;
----

== Description

This is the type of data stored in a Value&period; These types are loosely modeled after the JavaScript types and data structures&period;

Primitive values are Undefined, Null, Boolean, Integer, and String&period;

Undefined and Null are inhabited by a single value each&period; The difference between Undefined and Null is that Undefined is the default value for a Value, while Null represents a value that is explicitly set&period; Undefined is used to represent things such as&colon;

* An uninitialized Value
* The Value returned from a function that failed to return a value
* The result of accessing a nonexistent object property
* The result of a `find` algorithm when no element is found

This distinction is semantically important as algorithms frequently need to distinguish between these two cases&period;

Booleans, Integers, and Strings are also primitive values&period; This means they are deeply copied when assigned or passed as a parameter&period;

Other value types, such as Array, Object, and Function are reference types, meaning that they are not copied when assigned or passed as a parameter&period; Instead, the reference is copied, and the original value is shared&period;

These reference types are modeled after JavaScript &quot;Objects&quot;&period; All non&hyphen;primitive types (Object types) are derived from Object in JavaScript&period; This means types such as Array and Function represent a relevant selection of built&hyphen;in types that would derive from Object in JavaScript&period;

Objects are a collection of properties, which are equivalent to key&hyphen;value pairs&period; Property values can be any type, including other Objects, allowing for the creation of arbitrarily complex data structures&period;

* https&colon;&sol;&sol;developer&period;mozilla&period;org&sol;en&hyphen;US&sol;docs&sol;Web&sol;JavaScript&sol;Data&lowbar;structures

== Members

[cols="1,4"]
|===
| Name| Description
| `Undefined` 
| The value is undefined&period;
| `Null` 
| The value is null&period;
| `Boolean` 
| The value is a boolean&period;
| `Integer` 
| The value is an integer&period;
| `String` 
| The value is a string&period;
| `SafeString` 
| The value is a safe string&period;
| `Array` 
| The value is an array&period;
| `Object` 
| The value is an object&period;
| `Function` 
| The value is a function&period;
|===

`LazyArray` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

Return a new link:#mrdocs-dom-Array[`dom&colon;&colon;Array`] based on a lazy array implementation&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::ranges::random&lowbar;access&lowbar;range T&gt;
requires HasStandaloneValueFrom&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;T&gt;&gt;
link:#mrdocs-dom-Array[Array]
link:#mrdocs-dom-LazyArray-0c[LazyArray](T const& arr);
----

[.small]#link:#mrdocs-dom-LazyArray-0c[_» more&period;&period;&period;_]#

Return a new dom&colon;&colon;Array based on a FromValue context


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::random&lowbar;access&lowbar;range T,
    class Context&gt;
requires HasValueFrom&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;T&gt;, Context&gt;
link:#mrdocs-dom-Array[Array]
link:#mrdocs-dom-LazyArray-07[LazyArray](
    T const& arr,
    Context const& ctx);
----

[.small]#link:#mrdocs-dom-LazyArray-07[_» more&period;&period;&period;_]#

== Return Value

* A new dom&colon;&colon;Array whose elements are the result of converting each element in the underlying range to a dom&colon;&colon;Value&period;
* A new dom&colon;&colon;Array whose elements are the result of converting each element in the underlying range using the specified context&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The underlying range of elements&period;
| *ctx*
| The context used to convert each element to a dom&colon;&colon;Value&period;
|===

Return a new link:#mrdocs-dom-Array[`dom&colon;&colon;Array`] based on a lazy array implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::ranges::random&lowbar;access&lowbar;range T&gt;
requires HasStandaloneValueFrom&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;T&gt;&gt;
link:#mrdocs-dom-Array[Array]
LazyArray(T const& arr);
----

== Return Value

A new dom&colon;&colon;Array whose elements are the result of converting each element in the underlying range to a dom&colon;&colon;Value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The underlying range of elements&period;
|===

Return a new dom&colon;&colon;Array based on a FromValue context

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::random&lowbar;access&lowbar;range T,
    class Context&gt;
requires HasValueFrom&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;T&gt;, Context&gt;
link:#mrdocs-dom-Array[Array]
LazyArray(
    T const& arr,
    Context const& ctx);
----

== Return Value

A new dom&colon;&colon;Array whose elements are the result of converting each element in the underlying range using the specified context&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The underlying range of elements&period;
| *ctx*
| The context used to convert each element to a dom&colon;&colon;Value&period;
|===

`LazyObject` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

Return a new dom&colon;&colon;Object based on a lazy object implementation&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-dom-HasLazyObjectMapWithoutContext[HasLazyObjectMapWithoutContext] T&gt;
link:#mrdocs-dom-Object[Object]
link:#mrdocs-dom-LazyObject-0dd[LazyObject](T const& obj);
----

[.small]#link:#mrdocs-dom-LazyObject-0dd[_» more&period;&period;&period;_]#

Return a new dom&colon;&colon;Object based on a transformed lazy array implementation&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context&gt;
requires HasLazyObjectMap&lt;T, Context&gt;
link:#mrdocs-dom-Object[Object]
link:#mrdocs-dom-LazyObject-0d5[LazyObject](
    T const& arr,
    Context const& context);
----

[.small]#link:#mrdocs-dom-LazyObject-0d5[_» more&period;&period;&period;_]#

== Return Value

* A new dom&colon;&colon;Object whose properties are the result of converting each property in the underlying object to a dom&colon;&colon;Value&period;
* A new dom&colon;&colon;Array whose elements are the result of converting each element in the underlying range using the specified context&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| The underlying object&period;
| *arr*
| The underlying range of elements&period;
| *context*
| The context used to convert each element to a dom&colon;&colon;Value&period;
|===

Return a new dom&colon;&colon;Object based on a lazy object implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-dom-HasLazyObjectMapWithoutContext[HasLazyObjectMapWithoutContext] T&gt;
link:#mrdocs-dom-Object[Object]
LazyObject(T const& obj);
----

== Return Value

A new dom&colon;&colon;Object whose properties are the result of converting each property in the underlying object to a dom&colon;&colon;Value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| The underlying object&period;
|===

Return a new dom&colon;&colon;Object based on a transformed lazy array implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context&gt;
requires HasLazyObjectMap&lt;T, Context&gt;
link:#mrdocs-dom-Object[Object]
LazyObject(
    T const& arr,
    Context const& context);
----

== Return Value

A new dom&colon;&colon;Array whose elements are the result of converting each element in the underlying range using the specified context&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The underlying range of elements&period;
| *context*
| The context used to convert each element to a dom&colon;&colon;Value&period;
|===

Return a new dom&colon;&colon;Array based on a transformed lazy array implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyArray&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::random&lowbar;access&lowbar;range T,
    class F&gt;
requires std&colon;&colon;invocable&lt;F, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;T&gt;&gt; &amp;&amp;
    HasStandaloneValueFrom&lt;std&colon;&colon;invoke&lowbar;result&lowbar;t&lt;F, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;T&gt;&gt;&gt;
link:#mrdocs-dom-Array[Array]
TransformArray(
    T const& arr,
    F const& f);
----

== Return Value

A new dom&colon;&colon;Array whose elements are the result of applying the transform function to each element in the underlying range&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The underlying range of elements&period;
| *f*
| The transform function to apply to each element before converting it to a dom&colon;&colon;Value&period;
|===

`ValueFrom` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

Convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires HasStandaloneValueFrom&lt;T&gt;
link:#mrdocs-dom-Value[Value]
link:#mrdocs-dom-ValueFrom-0d[ValueFrom](T&& t);
----

[.small]#link:#mrdocs-dom-ValueFrom-0d[_» more&period;&period;&period;_]#

Convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires HasStandaloneValueFrom&lt;T&gt;
void
link:#mrdocs-dom-ValueFrom-06[ValueFrom](
    T&& t,
    link:#mrdocs-dom-Value[Value]& v);
----

[.small]#link:#mrdocs-dom-ValueFrom-06[_» more&period;&period;&period;_]#

Convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] with a context


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context&gt;
requires HasValueFrom&lt;T, Context&gt;
link:#mrdocs-dom-Value[Value]
link:#mrdocs-dom-ValueFrom-05[ValueFrom](
    T&& t,
    Context const& ctx);
----

[.small]#link:#mrdocs-dom-ValueFrom-05[_» more&period;&period;&period;_]#

Convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class Context,
    link:#mrdocs-dom-HasValueFrom[HasValueFrom&lt;Context&gt;] T&gt;
void
link:#mrdocs-dom-ValueFrom-09[ValueFrom](
    T&& t,
    Context const& ctx,
    link:#mrdocs-dom-Value[Value]& v);
----

[.small]#link:#mrdocs-dom-ValueFrom-09[_» more&period;&period;&period;_]#

== Return Value

link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] out parameter&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type of the object to convert&period;
| *Context*
| The type of context passed to the conversion function&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| The object to convert&period;
| *v*
| link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] out parameter&period;
| *ctx*
| Context passed to the conversion function&period;
|===

== See Also

link:#mrdocs-dom-ValueFromTag[`dom&colon;&colon;ValueFromTag`], http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1895r0.pdf[ tag&lowbar;invoke&colon; A general pattern for supporting customisable functions]

link:#mrdocs-dom-ValueFromTag[`dom&colon;&colon;ValueFromTag`] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1895r0.pdf[ tag&lowbar;invoke&colon; A general pattern for supporting customisable functions]

Convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires HasStandaloneValueFrom&lt;T&gt;
link:#mrdocs-dom-Value[Value]
ValueFrom(T&& t);
----

== Description

This function attempts to convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] using

* a user&hyphen;provided overload of `tag&lowbar;invoke`&period;
* one of link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&apos;s constructors,

Conversion of other types is done by calling an overload of `tag&lowbar;invoke` found by argument&hyphen;dependent lookup&period; Its signature should be similar to&colon;

[,cpp]
----
void tag_invoke( ValueFromTag, dom::Value&, T );
----
== Exception Safety

Strong guarantee&period;

== Return Value

link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] out parameter&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type of the object to convert&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| The object to convert&period;
|===

== See Also

link:#mrdocs-dom-ValueFromTag[`dom&colon;&colon;ValueFromTag`], http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1895r0.pdf[ tag&lowbar;invoke&colon; A general pattern for supporting customisable functions]

Convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires HasStandaloneValueFrom&lt;T&gt;
void
ValueFrom(
    T&& t,
    link:#mrdocs-dom-Value[Value]& v);
----

== Description

This function attempts to convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] using

* a user&hyphen;provided overload of `tag&lowbar;invoke`&period;
* one of link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&apos;s constructors,

Conversion of other types is done by calling an overload of `tag&lowbar;invoke` found by argument&hyphen;dependent lookup&period; Its signature should be similar to&colon;

[,cpp]
----
void tag_invoke( ValueFromTag, dom::Value&, T );
----
== Exception Safety

Strong guarantee&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type of the object to convert&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| The object to convert&period;
| *v*
| link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] out parameter&period;
|===

== See Also

link:#mrdocs-dom-ValueFromTag[`dom&colon;&colon;ValueFromTag`] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1895r0.pdf[ tag&lowbar;invoke&colon; A general pattern for supporting customisable functions]

Convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] with a context

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context&gt;
requires HasValueFrom&lt;T, Context&gt;
link:#mrdocs-dom-Value[Value]
ValueFrom(
    T&& t,
    Context const& ctx);
----

== Description

This function attempts to convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] using

* a user&hyphen;provided overload of `tag&lowbar;invoke`&period;
* one of link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&apos;s constructors,

Conversion of other types is done by calling an overload of `tag&lowbar;invoke` found by argument&hyphen;dependent lookup&period; Its signature should be similar to&colon;

[,cpp]
----
void tag_invoke( ValueFromTag, dom::Value&, T );
----
== Exception Safety

Strong guarantee&period;

== Return Value

link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] out parameter&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type of the object to convert&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| The object to convert&period;
| *ctx*
| Context passed to the conversion function&period;
|===

== See Also

link:#mrdocs-dom-ValueFromTag[`dom&colon;&colon;ValueFromTag`], http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1895r0.pdf[ tag&lowbar;invoke&colon; A general pattern for supporting customisable functions]

Convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class Context,
    link:#mrdocs-dom-HasValueFrom[HasValueFrom&lt;Context&gt;] T&gt;
void
ValueFrom(
    T&& t,
    Context const& ctx,
    link:#mrdocs-dom-Value[Value]& v);
----

== Description

This function attempts to convert an object of type `T` to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] using

* a user&hyphen;provided overload of `tag&lowbar;invoke`&period;
* one of link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&apos;s constructors,

Conversion of user&hyphen;provided types is done by calling an overload of `tag&lowbar;invoke` found by argument&hyphen;dependent lookup&period; Its signature should be similar to&colon;

[,cpp]
----
void tag_invoke( ValueFromTag, dom::Value&, T,  Context const& );
----
or

[,cpp]
----
void tag_invoke( ValueFromTag, dom::Value&, T );
----
The overloads are checked for existence in that order and the first that matches will be selected&period;

The `ctx` argument can be used either as a tag type to provide conversions for third&hyphen;party types, or to pass extra data to the conversion function&period;

== Exception Safety

Strong guarantee&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type of the object to convert&period;
| *Context*
| The type of context passed to the conversion function&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| The object to convert&period;
| *ctx*
| Context passed to the conversion function&period;
| *v*
| link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] out parameter&period;
|===

== See Also

link:#mrdocs-dom-ValueFromTag[`dom&colon;&colon;ValueFromTag`] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1895r0.pdf[ tag&lowbar;invoke&colon; A general pattern for supporting customisable functions]

Create a Function from a fixed&hyphen;arity invocable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
link:#mrdocs-dom-Function[Function]
makeInvocable(F&& f);
----

== Return Value

Function that forwards arguments to `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Callable to wrap&period;
|===

Create a Function that receives the argument Array directly&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
requires std&colon;&colon;invocable&lt;F, Array const&amp;&gt;
link:#mrdocs-dom-Function[Function]
makeVariadicInvocable(F&& f);
----

== Return Value

Function wrapper for the callable&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Callable invoked with the argument array&period;
|===

Return a new array using a custom implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;derived&lowbar;from&lt;T, ArrayImpl&gt;
link:#mrdocs-dom-Array[Array]
newArray(Args&&&period;&period;&period; args);
----

== Description

Return a new array using a custom implementation&period;

== Return Value

A new array using the specified implementation&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type of the custom implementation&period; This must be derived from ArrayImpl&period;
| *Args*
| The types of the arguments&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the constructor of T&period;
|===

Return a diagnostic string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;derived&lowbar;from&lt;T, FunctionImpl&gt;
link:#mrdocs-dom-Function[Function]
newFunction(Args&&&period;&period;&period; args);
----

== Description

Return a new function using a custom implementation&period;

== Return Value

a diagnostic string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to the function&period;
|===

Return a new object using a custom implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;derived&lowbar;from&lt;T, ObjectImpl&gt;
link:#mrdocs-dom-Object[Object]
newObject(Args&&&period;&period;&period; args);
----

== Return Value

A new object using the specified implementation&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type of the custom implementation&period; This must be derived from ObjectImpl&period;
| *Args*
| The types of the arguments&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the constructor of T&period;
|===

Return the first dom&colon;&colon;Value that is not truthy, or the last one&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_and-06[operator&amp;&amp;](
    S const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_and-06[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_and-0de[operator&amp;&amp;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_and-0de[_» more&period;&period;&period;_]#

Return the first dom&colon;&colon;Value that is not truthy, or the last one&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-dom-operator_and-0df0[operator&amp;&amp;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs);
----

[.small]#link:#mrdocs-dom-operator_and-0df0[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&amp;&amp;(
    S const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&amp;&amp;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

Return the first dom&colon;&colon;Value that is not truthy, or the last one&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
operator&amp;&amp;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs);
----

== Description

This function is equivalent to the JavaScript `&amp;&amp;` operator&period;

== Return Value

the first dom&colon;&colon;Value that is not truthy, or the last one&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Addition operators

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array-iterator[iterator]
operator&plus;(
    link:#mrdocs-dom-Array-iterator[difference&lowbar;type] n,
    link:#mrdocs-dom-Array-iterator[iterator] it) noexcept;
----

[.small]#[_» more&period;&period;&period;_]#

Concatenate two arrays&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array]
link:#mrdocs-dom-operator_plus-0a2[operator&plus;](
    link:#mrdocs-dom-Array[Array] const& lhs,
    link:#mrdocs-dom-Array[Array] const& rhs);
----

[.small]#link:#mrdocs-dom-operator_plus-0a2[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_plus-0a8[operator&plus;](
    link:#mrdocs-dom-Array[Array] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_plus-0a8[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_plus-0b[operator&plus;](
    S const& lhs,
    link:#mrdocs-dom-Array[Array] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_plus-0b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_plus-00c[operator&plus;](
    S const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_plus-00c[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_plus-01[operator&plus;](
    S const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_plus-01[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_plus-06b[operator&plus;](
    link:#mrdocs-dom-String[String] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_plus-06b[_» more&period;&period;&period;_]#

Concatenate two strings&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_plus-0c8[operator&plus;](
    link:#mrdocs-dom-String[String] const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_plus-0c8[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_plus-064[operator&plus;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_plus-064[_» more&period;&period;&period;_]#

Add or concatenate two values&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-dom-operator_plus-0cf[operator&plus;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs);
----

[.small]#link:#mrdocs-dom-operator_plus-0cf[_» more&period;&period;&period;_]#

== Return Value

The concatenated string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left&hyphen;hand side string&period;
| *rhs*
| The right&hyphen;hand side string&period;
|===

Concatenate two arrays&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[Array]
operator&plus;(
    link:#mrdocs-dom-Array[Array] const& lhs,
    link:#mrdocs-dom-Array[Array] const& rhs);
----

== Return Value

An array of values

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&plus;(
    link:#mrdocs-dom-Array[Array] const& lhs,
    S const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&plus;(
    S const& lhs,
    link:#mrdocs-dom-Array[Array] const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&plus;(
    S const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&plus;(
    S const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&plus;(
    link:#mrdocs-dom-String[String] const& lhs,
    S const& rhs) noexcept;
----

Concatenate two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&plus;(
    link:#mrdocs-dom-String[String] const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

== Return Value

The concatenated string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left&hyphen;hand side string&period;
| *rhs*
| The right&hyphen;hand side string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&plus;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

Add or concatenate two values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
operator&plus;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs);
----

== Return Value

A variant container for any kind of Dom value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Return the first dom&colon;&colon;Value that is truthy, or the last one&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_or-0d[operator&verbar;&verbar;](
    S const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_or-0d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_or-09[operator&verbar;&verbar;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_or-09[_» more&period;&period;&period;_]#

Return the first dom&colon;&colon;Value that is truthy, or the last one&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-dom-operator_or-05[operator&verbar;&verbar;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs);
----

[.small]#link:#mrdocs-dom-operator_or-05[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&verbar;&verbar;(
    S const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&verbar;&verbar;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

Return the first dom&colon;&colon;Value that is truthy, or the last one&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
operator&verbar;&verbar;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs);
----

== Description

This function is equivalent to the JavaScript `&verbar;&verbar;` operator&period;

== Return Value

the first dom&colon;&colon;Value that is truthy, or the last one&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Return a non&hyphen;empty string, or a null&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

Return a non&hyphen;empty string, or a null&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]
link:#mrdocs-dom-stringOrNull-0e[stringOrNull](std::string&lowbar;view s);
----

[.small]#link:#mrdocs-dom-stringOrNull-0e[_» more&period;&period;&period;_]#

Return a non&hyphen;empty string, or a null&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]
link:#mrdocs-dom-stringOrNull-01[stringOrNull](link:#mrdocs-Optional-03[Optional&lt;std::string&gt;] s);
----

[.small]#link:#mrdocs-dom-stringOrNull-01[_» more&period;&period;&period;_]#

Return a non&hyphen;empty string, or a null&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]
link:#mrdocs-dom-stringOrNull-0d[stringOrNull](std::string const& s);
----

[.small]#link:#mrdocs-dom-stringOrNull-0d[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to check&period;
|===

Return a non&hyphen;empty string, or a null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]
stringOrNull(std::string&lowbar;view s);
----

== Return Value

a non&hyphen;empty string, or a null&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to check&period;
|===

Return a non&hyphen;empty string, or a null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]
stringOrNull(link:#mrdocs-Optional-03[Optional&lt;std::string&gt;] s);
----

== Return Value

a non&hyphen;empty string, or a null&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to check&period;
|===

Return a non&hyphen;empty string, or a null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[Value]
stringOrNull(std::string const& s);
----

== Return Value

a non&hyphen;empty string, or a null&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to check&period;
|===

`swap` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Swap two arrays&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-dom-swap-0f3[swap](
    link:#mrdocs-dom-Array[Array]& lhs,
    link:#mrdocs-dom-Array[Array]& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-swap-0f3[_» more&period;&period;&period;_]#

Swap two objects&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-dom-swap-0ff[swap](
    link:#mrdocs-dom-Function[Function]& lhs,
    link:#mrdocs-dom-Function[Function]& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-swap-0ff[_» more&period;&period;&period;_]#

Swap two objects&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-dom-swap-08[swap](
    link:#mrdocs-dom-Object[Object]& lhs,
    link:#mrdocs-dom-Object[Object]& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-swap-08[_» more&period;&period;&period;_]#

Swap two strings&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-dom-swap-06[swap](
    link:#mrdocs-dom-String[String]& lhs,
    link:#mrdocs-dom-String[String]& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-swap-06[_» more&period;&period;&period;_]#

Swap two values&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-dom-swap-01[swap](
    link:#mrdocs-dom-Value[Value]& v0,
    link:#mrdocs-dom-Value[Value]& v1) noexcept;
----

[.small]#link:#mrdocs-dom-swap-01[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The first object&period;
| *rhs*
| The second object&period;
|===

Swap two arrays&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(
    link:#mrdocs-dom-Array[Array]& lhs,
    link:#mrdocs-dom-Array[Array]& rhs) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| An array of values
| *rhs*
| An array of values
|===

Swap two objects&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(
    link:#mrdocs-dom-Function[Function]& lhs,
    link:#mrdocs-dom-Function[Function]& rhs) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The first object&period;
| *rhs*
| The second object&period;
|===

Swap two objects&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(
    link:#mrdocs-dom-Object[Object]& lhs,
    link:#mrdocs-dom-Object[Object]& rhs) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| A container of key and value pairs&period;
| *rhs*
| A container of key and value pairs&period;
|===

Swap two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(
    link:#mrdocs-dom-String[String]& lhs,
    link:#mrdocs-dom-String[String]& rhs) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The first string&period;
| *rhs*
| The second string&period;
|===

Swap two values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(
    link:#mrdocs-dom-Value[Value]& v0,
    link:#mrdocs-dom-Value[Value]& v1) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v0*
| A variant container for any kind of Dom value&period;
| *v1*
| A variant container for any kind of Dom value&period;
|===

`toString` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Return a diagnostic string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-dom-toString-01b[toString](link:#mrdocs-dom-Array[Array] const& arr);
----

[.small]#link:#mrdocs-dom-toString-01b[_» more&period;&period;&period;_]#

Return a diagnostic string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-dom-toString-018[toString](link:#mrdocs-dom-Object[Object] const& object);
----

[.small]#link:#mrdocs-dom-toString-018[_» more&period;&period;&period;_]#

Return value as a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-dom-toString-02[toString](link:#mrdocs-dom-Value[Value] const& value);
----

[.small]#link:#mrdocs-dom-toString-02[_» more&period;&period;&period;_]#

Return a diagnostic string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
toString(link:#mrdocs-dom-Array[Array] const& arr);
----

== Return Value

a diagnostic string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| An array of values
|===

Return a diagnostic string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
toString(link:#mrdocs-dom-Object[Object] const& object);
----

== Return Value

a diagnostic string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *object*
| A container of key and value pairs&period;
|===

Return value as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
toString(link:#mrdocs-dom-Value[Value] const& value);
----

== Return Value

value as a string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| A variant container for any kind of Dom value&period;
|===

Equality operators

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Return the result of comparing two strings&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-dom-operator_eq-04[operator&equals;&equals;](
    link:#mrdocs-dom-String[String] const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_eq-04[_» more&period;&period;&period;_]#

Return the result of comparing two strings&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-dom-operator_eq-0e[operator&equals;&equals;](
    link:#mrdocs-dom-String[String] const& lhs,
    StringLike const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_eq-0e[_» more&period;&period;&period;_]#

Compare two values for equality&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-dom-operator_eq-07[operator&equals;&equals;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_eq-07[_» more&period;&period;&period;_]#

Compare two objects for equality&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-dom-operator_eq-01[operator&equals;&equals;](
    link:#mrdocs-dom-Object[Object] const& a,
    link:#mrdocs-dom-Object[Object] const& b) noexcept;
----

[.small]#link:#mrdocs-dom-operator_eq-01[_» more&period;&period;&period;_]#

Compare two arrays for equality&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-dom-operator_eq-0b[operator&equals;&equals;](
    link:#mrdocs-dom-Array[Array] const& lhs,
    link:#mrdocs-dom-Array[Array] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_eq-0b[_» more&period;&period;&period;_]#

Return the result of comparing two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-dom-String[String] const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

== Return Value

the result of comparing two strings&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Return the result of comparing two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-dom-String[String] const& lhs,
    StringLike const& rhs) noexcept;
----

== Return Value

the result of comparing two strings&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compare two values for equality&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

== Description

This operator uses strict equality, meaning that the types must match exactly, and for objects and arrays the children must match exactly&period;

The `&equals;&equals;` operator behaves differently for objects compared to primitive data types like numbers and strings&period; When comparing objects using `&equals;&equals;`, it checks for reference equality, not structural equality&period;

This means that two objects are considered equal with `&equals;&equals;&equals;` only if they reference the exact same object in memory&period;

[NOTE]
====
In JavaScript, this is equivalent to the `&equals;&equals;&equals;` operator, which does not perform type conversions&period;

====

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compare two objects for equality&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-dom-Object[Object] const& a,
    link:#mrdocs-dom-Object[Object] const& b) noexcept;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Compare two arrays for equality&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-dom-Array[Array] const& lhs,
    link:#mrdocs-dom-Array[Array] const& rhs) noexcept;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Return the result of comparing two strings&period;

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

Return the result of comparing two strings&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-dom-operator_not_eq-0e[operator!&equals;](
    link:#mrdocs-dom-String[String] const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_not_eq-0e[_» more&period;&period;&period;_]#

Return the result of comparing two strings&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-dom-operator_not_eq-03[operator!&equals;](
    link:#mrdocs-dom-String[String] const& lhs,
    StringLike const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_not_eq-03[_» more&period;&period;&period;_]#

Return the result of comparing two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator!&equals;(
    link:#mrdocs-dom-String[String] const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

== Return Value

the result of comparing two strings&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Return the result of comparing two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator!&equals;(
    link:#mrdocs-dom-String[String] const& lhs,
    StringLike const& rhs) noexcept;
----

== Return Value

the result of comparing two strings&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operators

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

Return the result of comparing two strings&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_3way-00[operator&lt;&equals;&gt;](
    link:#mrdocs-dom-String[String] const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_3way-00[_» more&period;&period;&period;_]#

Return the result of comparing two strings&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_3way-01[operator&lt;&equals;&gt;](
    link:#mrdocs-dom-String[String] const& lhs,
    StringLike const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_3way-01[_» more&period;&period;&period;_]#

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_3way-0c[operator&lt;&equals;&gt;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_3way-0c[_» more&period;&period;&period;_]#

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-dom-operator_3way-02[operator&lt;&equals;&gt;](
    S const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_3way-02[_» more&period;&period;&period;_]#

Compare two values for inequality&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-dom-operator_3way-09[operator&lt;&equals;&gt;](
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_3way-09[_» more&period;&period;&period;_]#

Compare two objects for precedence&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-dom-operator_3way-075[operator&lt;&equals;&gt;](
    link:#mrdocs-dom-Object[Object] const& a,
    link:#mrdocs-dom-Object[Object] const& b) noexcept;
----

[.small]#link:#mrdocs-dom-operator_3way-075[_» more&period;&period;&period;_]#

Compare two arrays for precedence&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-dom-operator_3way-0a[operator&lt;&equals;&gt;](
    link:#mrdocs-dom-Array[Array] const& lhs,
    link:#mrdocs-dom-Array[Array] const& rhs) noexcept;
----

[.small]#link:#mrdocs-dom-operator_3way-0a[_» more&period;&period;&period;_]#

Return the result of comparing two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(
    link:#mrdocs-dom-String[String] const& lhs,
    link:#mrdocs-dom-String[String] const& rhs) noexcept;
----

== Return Value

the result of comparing two strings&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Return the result of comparing two strings&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(
    link:#mrdocs-dom-String[String] const& lhs,
    StringLike const& rhs) noexcept;
----

== Return Value

the result of comparing two strings&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(
    S const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compare two values for inequality&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-dom-Value[Value] const& lhs,
    link:#mrdocs-dom-Value[Value] const& rhs) noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compare two objects for precedence&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Object&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-dom-Object[Object] const& a,
    link:#mrdocs-dom-Object[Object] const& b) noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Compare two arrays for precedence&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Array&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-dom-Array[Array] const& lhs,
    link:#mrdocs-dom-Array[Array] const& rhs) noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Determine if `T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context&gt;
concept HasLazyObjectMap = HasLazyObjectMapWithContext&lt;T, Context&gt; &verbar;&verbar;
    HasLazyObjectMapWithoutContext&lt;T&gt;;
----

== Description

If `T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] via a call to link:#mrdocs-dom-ValueFrom-0a[`dom&colon;&colon;ValueFrom`], the static data member `value` is defined as `true`&period; Otherwise, `value` is defined as `false`&period;

Concept to determine if a type can be mapped to a link:#mrdocs-dom-LazyObjectImpl-04[`dom&colon;&colon;LazyObjectImpl`] with a user&hyphen;provided conversion&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context&gt;
concept HasLazyObjectMapWithContext = requires(
    detail&colon;&colon;ArchetypalIO&amp; io,
    T const&amp; t,
    Context const&amp; ctx)
&lcub;
    &lcub; tag&lowbar;invoke(LazyObjectMapTag&lcub;&rcub;, io, t, ctx) &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;void&gt;&semi;
&rcub;;
----

== Description

This concept determines if the user&hyphen;provided conversion is defined as&colon;

[,cpp]
----
template <class IO>
void tag_invoke( LazyObjectMapTag, IO&, T,  Context const& );
----
Concept to determine if a type can be mapped to a link:#mrdocs-dom-LazyObjectImpl-04[`dom&colon;&colon;LazyObjectImpl`] with a user&hyphen;provided conversion&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;LazyObject&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept HasLazyObjectMapWithoutContext = requires(
    detail&colon;&colon;ArchetypalIO&amp; io,
    T const&amp; t)
&lcub;
    &lcub; tag&lowbar;invoke(LazyObjectMapTag&lcub;&rcub;, io, t) &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;void&gt;&semi;
&rcub;;
----

== Description

This concept determines if the user&hyphen;provided conversion is defined as&colon;

[,cpp]
----
template <class IO>
void tag_invoke( LazyObjectMapTag, IO&, T& );
----
This customization can be defined by any type that needs to be converted to&sol;from a lazy link:#mrdocs-dom-Object[`dom&colon;&colon;Object`]&period; For example&colon;

[,cpp]
----
template <class IO>
void tag_invoke( LazyObjectMapTag, IO& io, MyStruct const& s)
{
    io.map("name", s.name);
    io.map("size", s.size);
    io.map("age",  s.age);
}
----
Determine if ` T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] without a context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept HasStandaloneValueFrom = HasValueFromWithoutContext&lt;T&gt; &verbar;&verbar;
    std&colon;&colon;constructible&lowbar;from&lt;Value, T&gt;;
----

== Description

This concept determines if there is a user&hyphen;provided conversion to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] that does not require a context or if link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] has a constructor that can be used to convert `T` to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;

Determine if `T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context&gt;
concept HasValueFrom = HasValueFromWithContext&lt;T, Context&gt; &verbar;&verbar;
    HasValueFromWithoutContext&lt;T&gt; &verbar;&verbar;
    std&colon;&colon;constructible&lowbar;from&lt;Value, T&gt;;
----

== Description

If `T` can be converted to link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] via a call to link:#mrdocs-dom-ValueFrom-0a[`dom&colon;&colon;ValueFrom`], the static data member `value` is defined as `true`&period; Otherwise, `value` is defined as `false`&period;

== See Also

link:#mrdocs-dom-ValueFrom-0a[`dom&colon;&colon;ValueFrom`]

Concept to determine if a type can be converted to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] with a user&hyphen;provided conversion&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Context&gt;
concept HasValueFromWithContext = requires(
    Value&amp; v,
    T const&amp; t,
    Context const&amp; ctx)
&lcub;
    tag&lowbar;invoke(ValueFromTag&lcub;&rcub;, v, t, ctx)&semi;
&rcub;;
----

== Description

This concept determines if the user&hyphen;provided conversion is defined as&colon;

[,cpp]
----
void tag_invoke( ValueFromTag, dom::Value&, T,  Context const& );
----
Concept to determine if a type can be converted to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] with a user&hyphen;provided conversion&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept HasValueFromWithoutContext = requires(
    Value&amp; v,
    T const&amp; t)
&lcub;
    tag&lowbar;invoke(ValueFromTag&lcub;&rcub;, v, t)&semi;
&rcub;;
----

== Description

This concept determines if the user&hyphen;provided conversion is defined as&colon;

[,cpp]
----
void tag_invoke( ValueFromTag, dom::Value&, T );
----
Satisfied if StringTy is convertible to String but not a String&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class StringTy&gt;
concept StringLikeTy = ! std&colon;&colon;is&lowbar;same&lowbar;v&lt;StringTy, String&gt; &amp;&amp;
    std&colon;&colon;convertible&lowbar;to&lt;StringTy, std&colon;&colon;string&lowbar;view&gt;;
----

Concept selecting callables convertible to dom&colon;&colon;Value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
concept function&lowbar;traits&lowbar;convertible&lowbar;to&lowbar;value = has&lowbar;function&lowbar;traits&lt;F&gt; &amp;&amp;
    has&lowbar;function&lowbar;traits&lowbar;for&lowbar;default&lowbar;function&lowbar;impl&lt;F&gt;;
----

Concept requiring all arguments be convertible to dom&colon;&colon;Value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename F&gt;
concept has&lowbar;function&lowbar;args&lowbar;for&lowbar;default&lowbar;function&lowbar;impl = (std&colon;&colon;tuple&lowbar;size&lowbar;v&lt;typename function&lowbar;traits&lt;F&gt;&colon;&colon;args&lowbar;type&gt; &equals;&equals; 0 &verbar;&verbar;
        &lsqb;&rsqb;&lt;std&colon;&colon;size&lowbar;t&period;&period;&period; I&gt;(std&colon;&colon;index&lowbar;sequence&lt;I&period;&period;&period;&gt;) &lcub;
        return
            (std&colon;&colon;convertible&lowbar;to&lt;
                std&colon;&colon;tuple&lowbar;element&lowbar;t&lt;
                    I, typename function&lowbar;traits&lt;F&gt;&colon;&colon;args&lowbar;type&gt;,
                Value&gt; &amp;&amp; &period;&period;&period;)&semi;
        &rcub;(std&colon;&colon;make&lowbar;index&lowbar;sequence&lt;std&colon;&colon;tuple&lowbar;size&lowbar;v&lt;typename function&lowbar;traits&lt;F&gt;&colon;&colon;args&lowbar;type&gt;&gt;()));
----

Concept true when function&lowbar;traits is defined for F&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename F&gt;
concept has&lowbar;function&lowbar;traits = requires &lcub;
    typename function&lowbar;traits&lt;F&gt;&colon;&colon;return&lowbar;type&semi;
    typename function&lowbar;traits&lt;F&gt;&colon;&colon;args&lowbar;type&semi;
&rcub;;
----

Concept combining argument and return constraints for default wrapper&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename F&gt;
concept has&lowbar;function&lowbar;traits&lowbar;for&lowbar;default&lowbar;function&lowbar;impl = has&lowbar;invoke&lowbar;result&lowbar;for&lowbar;default&lowbar;function&lowbar;impl&lt;F&gt; &amp;&amp;
    has&lowbar;function&lowbar;args&lowbar;for&lowbar;default&lowbar;function&lowbar;impl&lt;F&gt;;
----

Concept true when F returns Expected&lt;dom&colon;&colon;Value&gt; or Expected&lt;void&gt;&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename F&gt;
concept has&lowbar;invoke&lowbar;expected&lowbar;result&lowbar;convertible&lowbar;to&lowbar;dom&lowbar;value = detail&colon;&colon;isExpected&lt;typename function&lowbar;traits&lt;F&gt;&colon;&colon;return&lowbar;type&gt; &amp;&amp;
    (std&colon;&colon;convertible&lowbar;to&lt;typename function&lowbar;traits&lt;F&gt;&colon;&colon;return&lowbar;type&colon;&colon;value&lowbar;type, Value&gt; &verbar;&verbar;
     std&colon;&colon;same&lowbar;as&lt;typename function&lowbar;traits&lt;F&gt;&colon;&colon;return&lowbar;type&colon;&colon;value&lowbar;type, void&gt;);
----

Concept true when F returns a dom&colon;&colon;Value or void&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename F&gt;
concept has&lowbar;invoke&lowbar;result&lowbar;convertible&lowbar;to&lowbar;dom&lowbar;value = std&colon;&colon;convertible&lowbar;to&lt;typename function&lowbar;traits&lt;F&gt;&colon;&colon;return&lowbar;type, Value&gt; &verbar;&verbar;
    std&colon;&colon;same&lowbar;as&lt;typename function&lowbar;traits&lt;F&gt;&colon;&colon;return&lowbar;type, void&gt;;
----

Concept enabling default function wrapper for supported return types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename F&gt;
concept has&lowbar;invoke&lowbar;result&lowbar;for&lowbar;default&lowbar;function&lowbar;impl = has&lowbar;invoke&lowbar;result&lowbar;convertible&lowbar;to&lowbar;dom&lowbar;value&lt;F&gt; &verbar;&verbar;
    has&lowbar;invoke&lowbar;expected&lowbar;result&lowbar;convertible&lowbar;to&lowbar;dom&lowbar;value&lt;F&gt;;
----

Filesystem helpers (join, temp, canonicalize) used throughout MrDocs&period;

== Description

The `files` namespace centralizes cross&hyphen;platform path manipulation so CLI, generators, and tests can share the same normalization and staging logic&period;

== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-files-FileType[`FileType`] 
| The type of a file&period;
|===

== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-files-appendPath-04[`appendPath`] 
| `appendPath` overloads
| link:#mrdocs-files-createDirectory[`createDirectory`] 
| Create a directory&period;
| link:#mrdocs-files-exists[`exists`] 
| Determine if a path exists
| link:#mrdocs-files-getFileName[`getFileName`] 
| Return the filename part of the path&period;
| link:#mrdocs-files-getFileText[`getFileText`] 
| Return the contents of a file as a string&period;
| link:#mrdocs-files-getFileType[`getFileType`] 
| Return the file type or an error
| link:#mrdocs-files-getParentDir-00[`getParentDir`] 
| Return the parent directory&period;
| link:#mrdocs-files-getSourceFilename[`getSourceFilename`] 
| Return the relevant suffix of a source file path&period;
| link:#mrdocs-files-isAbsolute[`isAbsolute`] 
| Return true if pathName is absolute&period;
| link:#mrdocs-files-isDirectory[`isDirectory`] 
| Determine if a path is a directory&period;
| link:#mrdocs-files-isDirsy[`isDirsy`] 
| Return true if pathName ends in a separator&period;
| link:#mrdocs-files-isLexicalDirectory[`isLexicalDirectory`] 
| Determine lexically if a path is a directory&period;
| link:#mrdocs-files-isPosixStyle[`isPosixStyle`] 
| Check if the path is posix style&period;
| link:#mrdocs-files-makeAbsolute-0d[`makeAbsolute`] 
| Return an absolute path from a possibly relative path&period;
| link:#mrdocs-files-makeDirsy[`makeDirsy`] 
| Append a trailing native separator if not already present&period;
| link:#mrdocs-files-makePosixStyle[`makePosixStyle`] 
| Convert all backward slashes to forward slashes&period;
| link:#mrdocs-files-normalizeDir[`normalizeDir`] 
| Return a normalized directory&period;
| link:#mrdocs-files-normalizePath[`normalizePath`] 
| Return a normalized path&period;
| link:#mrdocs-files-requireAbsolute[`requireAbsolute`] 
| Return an error if pathName is not absolute&period;
| link:#mrdocs-files-requireDirectory[`requireDirectory`] 
| Return an error if the path is not a directory&period;
| link:#mrdocs-files-startsWith[`startsWith`] 
| Checks if the given path starts with the specified prefix&period;
| link:#mrdocs-files-withExtension[`withExtension`] 
| Return the filename with a new or different extension&period;
|===

The type of a file&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class FileType : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `not&lowbar;found` 
| The file does not exist
| `regular` 
| The path represents a regular file
| `directory` 
| The file is a directory
| `other` 
| The file is something else
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-files-getFileType[`getFileType`]
| Return the file type or an error
|===

`appendPath` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

Append a component to a base path using the native separator&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-files-appendPath-08[appendPath](
    std::string&lowbar;view basePath,
    std::string&lowbar;view name);
----

[.small]#link:#mrdocs-files-appendPath-08[_» more&period;&period;&period;_]#

Append two components to a base path using the native separator&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-files-appendPath-01[appendPath](
    std::string&lowbar;view basePath,
    std::string&lowbar;view name1,
    std::string&lowbar;view name2);
----

[.small]#link:#mrdocs-files-appendPath-01[_» more&period;&period;&period;_]#

Append three components to a base path using the native separator&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-files-appendPath-09[appendPath](
    std::string&lowbar;view basePath,
    std::string&lowbar;view name1,
    std::string&lowbar;view name2,
    std::string&lowbar;view name3);
----

[.small]#link:#mrdocs-files-appendPath-09[_» more&period;&period;&period;_]#

Append four components to a base path using the native separator&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-files-appendPath-00[appendPath](
    std::string&lowbar;view basePath,
    std::string&lowbar;view name1,
    std::string&lowbar;view name2,
    std::string&lowbar;view name3,
    std::string&lowbar;view name4);
----

[.small]#link:#mrdocs-files-appendPath-00[_» more&period;&period;&period;_]#

== Return Value

Combined path string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *basePath*
| Base path&period;
| *name*
| Component to append&period;
| *name1*
| First component to append&period;
| *name2*
| Second component to append&period;
| *name3*
| Third component to append&period;
| *name4*
| Fourth component to append&period;
|===

Append a component to a base path using the native separator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
appendPath(
    std::string&lowbar;view basePath,
    std::string&lowbar;view name);
----

== Return Value

Combined path string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *basePath*
| Base path&period;
| *name*
| Component to append&period;
|===

Append two components to a base path using the native separator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
appendPath(
    std::string&lowbar;view basePath,
    std::string&lowbar;view name1,
    std::string&lowbar;view name2);
----

== Return Value

Combined path string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *basePath*
| Base path&period;
| *name1*
| First component to append&period;
| *name2*
| Second component to append&period;
|===

Append three components to a base path using the native separator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
appendPath(
    std::string&lowbar;view basePath,
    std::string&lowbar;view name1,
    std::string&lowbar;view name2,
    std::string&lowbar;view name3);
----

== Return Value

Combined path string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *basePath*
| Base path&period;
| *name1*
| First component to append&period;
| *name2*
| Second component to append&period;
| *name3*
| Third component to append&period;
|===

Append four components to a base path using the native separator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
appendPath(
    std::string&lowbar;view basePath,
    std::string&lowbar;view name1,
    std::string&lowbar;view name2,
    std::string&lowbar;view name3,
    std::string&lowbar;view name4);
----

== Return Value

Combined path string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *basePath*
| Base path&period;
| *name1*
| First component to append&period;
| *name2*
| Second component to append&period;
| *name3*
| Third component to append&period;
| *name4*
| Fourth component to append&period;
|===

Create a directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
createDirectory(std::string&lowbar;view pathName);
----

== Description

Any missing parent directories will also be created&period;

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to create&period;
|===

Determine if a path exists

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
exists(std::string&lowbar;view pathName);
----

== Return Value

true if the path exists, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path
|===

Return the filename part of the path&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
getFileName(std::string&lowbar;view pathName);
----

== Return Value

The filename part of the path, or the empty string if there is none&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Return the contents of a file as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string&gt;]
getFileText(std::string&lowbar;view pathName);
----

== Return Value

The contents of the file, or an error if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the file&period;
|===

Return the file type or an error

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;FileType&gt;]
getFileType(std::string&lowbar;view pathName);
----

== Return Value

the file type or an error

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the file&period;
|===

Return the parent directory&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

Return the parent directory&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-files-getParentDir-05[getParentDir](std::string&lowbar;view pathName);
----

[.small]#link:#mrdocs-files-getParentDir-05[_» more&period;&period;&period;_]#

Return the parent directory&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-files-getParentDir-0c[getParentDir](
    std::string&lowbar;view pathName,
    unsigned int levels);
----

[.small]#link:#mrdocs-files-getParentDir-0c[_» more&period;&period;&period;_]#

== Return Value

The parent directory, or the empty string if there is none&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
| *levels*
| The number of levels to go up&period; If this is zero, the original path is returned&period; If this is greater than the number of levels in the path, the empty string is returned&period;
|===

Return the parent directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
getParentDir(std::string&lowbar;view pathName);
----

== Description

If the parent directory is defined, the returned path will always have a trailing separator&period;

== Return Value

The parent directory, or the empty string if there is none&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Return the parent directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
getParentDir(
    std::string&lowbar;view pathName,
    unsigned int levels);
----

== Description

If the parent directory is defined, the returned path will always have a trailing separator&period;

== Return Value

The parent directory, or the empty string if there is none&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
| *levels*
| The number of levels to go up&period; If this is zero, the original path is returned&period; If this is greater than the number of levels in the path, the empty string is returned&period;
|===

Return the relevant suffix of a source file path&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
getSourceFilename(std::string&lowbar;view pathName);
----

== Return Value

The suffix, including the leading dot, or the empty string if there is no suffix&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the file&period;
|===

Return true if pathName is absolute&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isAbsolute(std::string&lowbar;view pathName) noexcept;
----

== Return Value

true if the path is absolute, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Determine if a path is a directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isDirectory(std::string&lowbar;view pathName);
----

== Return Value

true if the path exists and is a directory, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path
|===

Return true if pathName ends in a separator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isDirsy(std::string&lowbar;view pathName) noexcept;
----

== Return Value

true if the path ends in a separator, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Determine lexically if a path is a directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isLexicalDirectory(std::string&lowbar;view pathName);
----

== Description

This function determines if a path is a directory&period;

If the path does not exist, the function determines lexically if the path represents a directory&period; In this case, the function returns true if the last path segment contains a period, otherwise false&period;

== Return Value

true if the path exists and is a directory, or if the path does not exist and the last path segment does not contain a period&period; false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path
|===

Check if the path is posix style&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isPosixStyle(std::string&lowbar;view pathName);
----

== Return Value

true if the path uses only forward slashes as path separators, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Return an absolute path from a possibly relative path&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

Return an absolute path from a possibly relative path&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string&gt;]
link:#mrdocs-files-makeAbsolute-03[makeAbsolute](std::string&lowbar;view pathName);
----

[.small]#link:#mrdocs-files-makeAbsolute-03[_» more&period;&period;&period;_]#

Return an absolute path from a possibly relative path&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-files-makeAbsolute-0c[makeAbsolute](
    std::string&lowbar;view pathName,
    std::string&lowbar;view workingDir);
----

[.small]#link:#mrdocs-files-makeAbsolute-0c[_» more&period;&period;&period;_]#

== Return Value

* The absolute path, or an error if any occurred&period;
* The absolute path, or an error if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
| *workingDir*
| The working directory to resolve relative paths against&period;
|===

Return an absolute path from a possibly relative path&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string&gt;]
makeAbsolute(std::string&lowbar;view pathName);
----

== Description

Relative paths are resolved against the current working directory of the process&period;

== Return Value

The absolute path, or an error if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Return an absolute path from a possibly relative path&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
makeAbsolute(
    std::string&lowbar;view pathName,
    std::string&lowbar;view workingDir);
----

== Return Value

The absolute path, or an error if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
| *workingDir*
| The working directory to resolve relative paths against&period;
|===

Append a trailing native separator if not already present&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
makeDirsy(std::string&lowbar;view pathName);
----

== Return Value

A copy of the path with a trailing separator if not already present&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Convert all backward slashes to forward slashes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
makePosixStyle(std::string&lowbar;view pathName);
----

== Return Value

A copy of the path with all backslashes replaced with forward slashes&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Return a normalized directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
normalizeDir(std::string&lowbar;view pathName);
----

== Description

This function returns a new directory path based on applying the changes defined by link:#mrdocs-files-normalizePath[`normalizePath`] and link:#mrdocs-files-makeDirsy[`makeDirsy`]&period;

== Return Value

The normalized path&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The relative or absolute path&period;
|===

Return a normalized path&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
normalizePath(std::string&lowbar;view pathName);
----

== Description

This function returns a new path based on applying the following changes to the passed path&colon;

* &quot;&period;&quot; and &quot;&period;&period;&quot; are resolved
* Separators made uniform
* Separators are replaced with the native separator

== Return Value

The normalized path&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The relative or absolute path&period;
|===

Return an error if pathName is not absolute&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
requireAbsolute(std::string&lowbar;view pathName);
----

== Return Value

An error if the path is not absolute&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path to the directory or file&period;
|===

Return an error if the path is not a directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
requireDirectory(std::string&lowbar;view pathName);
----

== Return Value

An error if the path does not exist or is not a directory&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| The absolute or relative path
|===

Checks if the given path starts with the specified prefix&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
startsWith(
    std::string&lowbar;view pathName,
    std::string&lowbar;view prefix);
----

== Description

This function compares the beginning of the `pathName` with the `prefix`&period; It returns true if `pathName` starts with `prefix`&period; The comparison is case&hyphen;sensitive&period;

Unlike a direct string comparison, this function also accepts differences in the slashes used to separate paths&period; Therefore, it returns true even when the slashes used in `pathName` and `prefix` are not the same&period; The function accepts both forward slashes (&quot;&sol;&quot;) and backslashes (&quot;&quot;)&period;

== Return Value

A boolean value&period; Returns true if `pathName` starts with `prefix`, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pathName*
| A string view representing the path to be checked&period;
| *prefix*
| A string view representing the prefix to be checked against the path&period;
|===

Return the filename with a new or different extension&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
withExtension(
    std::string&lowbar;view fileName,
    std::string&lowbar;view ext);
----

== Return Value

the filename with a new or different extension&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fileName*
| The absolute or relative path to the directory or file&period;
| *ext*
| The extension to use, without a leading dot&period; If this is empty and the path contains an extension, then the extension is removed&period;
|===

Handlebars helper registry for templates&period;

== Description

Everything under `helpers` mirrors the runtime helper registry shipped with our bundled Handlebars engine so templates can call the same helpers in both Node&hyphen;based dev mode and the embedded C&plus;&plus; rendering pipeline&period;

== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-helpers-and_fn[`and&lowbar;fn`] 
| &quot;and&quot; helper function
| link:#mrdocs-helpers-detag_fn[`detag&lowbar;fn`] 
| &quot;detag&quot; helper function
| link:#mrdocs-helpers-eq_fn[`eq&lowbar;fn`] 
| &quot;eq&quot; helper function
| link:#mrdocs-helpers-increment_fn[`increment&lowbar;fn`] 
| &quot;increment&quot; helper function
| link:#mrdocs-helpers-ne_fn[`ne&lowbar;fn`] 
| &quot;ne&quot; helper function
| link:#mrdocs-helpers-not_fn[`not&lowbar;fn`] 
| &quot;not&quot; helper function
| link:#mrdocs-helpers-or_fn[`or&lowbar;fn`] 
| &quot;or&quot; helper function
| link:#mrdocs-helpers-registerAntoraHelpers[`registerAntoraHelpers`] 
| Register all the Antora helpers into a Handlebars instance
| link:#mrdocs-helpers-registerBuiltinHelpers[`registerBuiltinHelpers`] 
| Register all the built&hyphen;in helpers into a Handlebars instance
| link:#mrdocs-helpers-registerConstructorHelpers[`registerConstructorHelpers`] 
| Register contructor helpers into a Handlebars instance
| link:#mrdocs-helpers-registerContainerHelpers[`registerContainerHelpers`] 
| Register helpers to manipulate composite data types
| link:#mrdocs-helpers-registerLogicalHelpers[`registerLogicalHelpers`] 
| Register logical helpers into a Handlebars instance
| link:#mrdocs-helpers-registerMathHelpers[`registerMathHelpers`] 
| Register math helpers into a Handlebars instance
| link:#mrdocs-helpers-registerStringHelpers[`registerStringHelpers`] 
| Register string helpers into a Handlebars instance
| link:#mrdocs-helpers-registerTypeHelpers[`registerTypeHelpers`] 
| Register type helpers into a Handlebars instance
| link:#mrdocs-helpers-relativize_fn[`relativize&lowbar;fn`] 
| &quot;relativize&quot; helper function
| link:#mrdocs-helpers-select_fn[`select&lowbar;fn`] 
| &quot;select&quot; helper function
| link:#mrdocs-helpers-year_fn[`year&lowbar;fn`] 
| &quot;year&quot; helper function
|===

&quot;and&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
and&lowbar;fn(link:#mrdocs-dom-Array[dom::Array] const& args);
----

== Description

The &quot;and&quot; helper returns true if all of the values are truthy&period;

== Return Value

True if all of the values are truthy, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The values to test
|===

&quot;detag&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
detag&lowbar;fn(link:#mrdocs-dom-Value[dom::Value] html);
----

== Description

The &quot;detag&quot; helper applies the regex expression &quot;&lt;&lsqb;&rsqb;&plus;&gt;&quot; to the input to remove all HTML tags&period;

== Return Value

A variant container for any kind of Dom value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *html*
| A variant container for any kind of Dom value&period;
|===

&quot;eq&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
eq&lowbar;fn(link:#mrdocs-dom-Array[dom::Array] const& args);
----

== Description

The &quot;eq&quot; helper returns true if all of the values are equal&period;

== Return Value

True if all of the values are equal, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The values to compare
|===

&quot;increment&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
increment&lowbar;fn(link:#mrdocs-dom-Value[dom::Value] const& value);
----

== Description

The &quot;increment&quot; helper adds 1 to the value if it&apos;s an integer and converts booleans to `true`&period; Other values are returned as&hyphen;is&period;

== Return Value

A variant container for any kind of Dom value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| A variant container for any kind of Dom value&period;
|===

&quot;ne&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
ne&lowbar;fn(link:#mrdocs-dom-Array[dom::Array] const& args);
----

== Description

The &quot;ne&quot; helper returns true if any of the values are not equal&period;

== Return Value

True if any of the values are not equal, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The values to compare
|===

&quot;not&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
not&lowbar;fn(link:#mrdocs-dom-Array[dom::Array] const& arg);
----

== Description

The &quot;not&quot; helper returns true if not all of the values are truthy&period;

== Return Value

True if not all of the values are truthy, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arg*
| An array of values
|===

&quot;or&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
or&lowbar;fn(link:#mrdocs-dom-Array[dom::Array] const& args);
----

== Description

The &quot;or&quot; helper returns true if any of the values are truthy&period;

== Return Value

A variant container for any kind of Dom value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| An array of values
|===

Register all the Antora helpers into a Handlebars instance

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerAntoraHelpers(link:#mrdocs-Handlebars[Handlebars]& hbs);
----

== Description

This function registers all the helpers that are part of the default Antora UI&period;

Individual Antora helpers can also be registered with the public `&ast;&lowbar;fn` functions in this namespace&period;

Since the Antora helpers are not mandatory and include many functions not applicable to all applications, this allows the user to register only some of the Antora helpers&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helpers into
|===

== See Also

https&colon;&sol;&sol;gitlab&period;com&sol;antora&sol;antora&hyphen;ui&hyphen;default&sol;&hyphen;&sol;tree&sol;master&sol;src&sol;helpers

Register all the built&hyphen;in helpers into a Handlebars instance

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerBuiltinHelpers(link:#mrdocs-Handlebars[Handlebars]& hbs);
----

== Description

Individual built&hyphen;in helpers can also be registered with the public `&ast;&lowbar;fn` functions in this namespace&period;

This allows the user to override only some of the built&hyphen;in helpers&period; In particular, this is important for mandatory helpers, such as `blockHelperMissing` and `helperMissing`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helpers into
|===

== See Also

https&colon;&sol;&sol;github&period;com&sol;handlebars&hyphen;lang&sol;handlebars&period;js&sol;tree&sol;master&sol;lib&sol;handlebars&sol;helpers

https&colon;&sol;&sol;handlebarsjs&period;com&sol;guide&sol;builtin&hyphen;helpers&period;html

Register contructor helpers into a Handlebars instance

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerConstructorHelpers(link:#mrdocs-Handlebars[Handlebars]& hbs);
----

== Description

This function registers a number of common helpers that allows the user to create objects of specific types directly from literals in the template&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helpers into
|===

Register helpers to manipulate composite data types

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerContainerHelpers(link:#mrdocs-Handlebars[Handlebars]& hbs);
----

== Description

This function registers a number of common helpers that operate on Objects and Arrays&period; Object and Array helpers are particularly useful because most applications will need to manipulate Objects and Arrays to extract information from them, such as object keys or specific Array items known ahead of time&period;

The helper names are inspired by the default functions provided in multiple programming languages for dictionaries, objects, and arrays, such as Python and JavaScript, for their default types&period;

The individual helpers are defined as an implementation detail and cannot be registered individually&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helpers into
|===

Register logical helpers into a Handlebars instance

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerLogicalHelpers(link:#mrdocs-Handlebars[Handlebars]& hbs);
----

== Description

This function registers a number of common helpers that perform logical operations&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helpers into
|===

Register math helpers into a Handlebars instance

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerMathHelpers(link:#mrdocs-Handlebars[Handlebars]& hbs);
----

== Description

This function registers a number of common helpers that perform mathemathical operations&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helpers into
|===

Register string helpers into a Handlebars instance

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerStringHelpers(link:#mrdocs-Handlebars[Handlebars]& hbs);
----

== Description

This function registers a number of common helpers that operate on strings&period; String helpers are particularly useful because most applications will need to manipulate strings for presentation purposes&period;

All helpers can be used as either block helpers or inline helpers&period; When used as a block helper, the block content is used as the first argument to the helper function&period; When used as an inline helper, the first argument is the value of the helper&period;

The helper names are inspired by the default string functions provided in multiple programming languages, such as Python and JavaScript, for their default string types&period;

The individual helpers are defined as an implementation detail and cannot be registered individually&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helpers into
|===

Register type helpers into a Handlebars instance

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerTypeHelpers(link:#mrdocs-Handlebars[Handlebars]& hbs);
----

== Description

This function registers a number of common helpers that operate on types, such as identity, type checking, and type conversion&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helpers into
|===

&quot;relativize&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
relativize&lowbar;fn(
    link:#mrdocs-dom-Value[dom::Value] to,
    link:#mrdocs-dom-Value[dom::Value] from,
    link:#mrdocs-dom-Value[dom::Value] context);
----

== Description

The &quot;relativize&quot; helper makes the first path relative to the second path&period;

== Return Value

A variant container for any kind of Dom value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *to*
| A variant container for any kind of Dom value&period;
| *from*
| A variant container for any kind of Dom value&period;
| *context*
| A variant container for any kind of Dom value&period;
|===

&quot;select&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
select&lowbar;fn(
    link:#mrdocs-dom-Value[dom::Value] const& condition,
    link:#mrdocs-dom-Value[dom::Value] const& result&lowbar;true,
    link:#mrdocs-dom-Value[dom::Value] const& result&lowbar;false);
----

== Description

The &quot;select&quot; helper returns the second argument if the first argument is truthy, and the third argument otherwise&period;

== Return Value

A variant container for any kind of Dom value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *condition*
| A variant container for any kind of Dom value&period;
| *result&lowbar;true*
| A variant container for any kind of Dom value&period;
| *result&lowbar;false*
| A variant container for any kind of Dom value&period;
|===

&quot;year&quot; helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
int
year&lowbar;fn();
----

== Description

The &quot;year&quot; helper returns the current year as an integer&period;

== Return Value

The current year as an integer&period;

JavaScript interop helpers for the embedded runtime&period;

== Description

These functions abstract over the embedded JavaScript engine so that scripts and helpers can be bound, invoked, and marshalled without leaking engine&hyphen;specific types into the rest of the codebase&period;

&num;&num; Implementation Notes (for Python&sol;Lua integrations)

The current implementation uses JerryScript with the following design choices&colon;

&num;&num;&num; Context Isolation Each link:#mrdocs-js-Context[`Context`] owns an independent JerryScript interpreter with its own 512KB heap&period; This allows multiple threads to execute JavaScript in parallel by giving each thread its own Context&period; The `JERRY&lowbar;EXTERNAL&lowbar;CONTEXT` build flag enables this multi&hyphen;context support&period;

&num;&num;&num; Scope and Value Lifetime JerryScript uses heap&hyphen;based reference counting (not a stack like Lua&sol;Duktape)&period; To provide deterministic cleanup similar to stack&hyphen;based engines&colon;

* *Scope* tracks values created within it and releases one reference to each when the scope ends&period; Values that were copied elsewhere survive&semi; values that remained local are freed&period;
* *Value* holds its own reference via jerry&lowbar;value&lowbar;copy&sol;jerry&lowbar;value&lowbar;free&period; Values can safely outlive their creating Scope if copied&period;

&num;&num;&num; Integer Limitations JerryScript only guarantees 32&hyphen;bit integer precision&period; Values outside the int32 range (approximately &plus;&sol;&hyphen;2 billion) are converted to strings when passed to JavaScript to avoid wraparound bugs&period; When reading values back, integers that fit in int64 are returned as integers&semi; others remain as doubles&period;

&num;&num;&num; DOM to JS Conversion Strategy

* *Objects*&colon; Use lazy Proxy wrappers to avoid infinite recursion from circular references (e&period;g&period;, Handlebars symbol contexts that reference parent symbols)&period; Properties are converted on&hyphen;demand when accessed&period;
* *Arrays*&colon; Converted eagerly (snapshot semantics) because they rarely contain circular references&period; This means JS mutations don&apos;t affect the original C&plus;&plus; array and vice versa&period;
* *Functions*&colon; Wrapped bidirectionally so JS can call C&plus;&plus; functions and C&plus;&plus; can invoke JS functions through dom&colon;&colon;Function&period;

&num;&num;&num; Thread Safety Each Context has its own mutex serializing operations on that context&period; Different Contexts can execute in parallel on different threads&period; Values hold a shared&lowbar;ptr to their Context, keeping it alive and using the mutex for all JerryScript operations&period;

&num;&num;&num; Port Functions JerryScript requires &quot;port functions&quot; for platform&hyphen;specific operations&period; We use the default jerry&hyphen;port library (JERRY&lowbar;PORT&equals;ON) for most functions (logging, time, fatal errors, etc&period;), but provide custom implementations of the context management functions&colon;

* `jerry&lowbar;port&lowbar;context&lowbar;alloc`&colon; Allocates context &plus; heap memory
* `jerry&lowbar;port&lowbar;context&lowbar;free`&colon; Frees context memory
* `jerry&lowbar;port&lowbar;context&lowbar;get`&colon; Returns current thread&apos;s active context

The default jerry&hyphen;port context functions use a static global pointer, limiting all threads to a single shared context&period; When building with JERRY&lowbar;EXTERNAL&lowbar;CONTEXT&equals;ON, these functions are excluded from jerry&hyphen;port (see third&hyphen;party&sol;patches&sol;jerryscript&sol;CMakeLists&period;txt), and mrdocs provides TLS&hyphen;based implementations that allow each thread to have its own active context, enabling parallel JavaScript execution&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Array[`Array`] 
| Lightweight handle to a JavaScript array&period;
| link:#mrdocs-js-Boolean[`Boolean`] 
| Boolean wrapper for JavaScript values&period;
| link:#mrdocs-js-Context[`Context`] 
| An isolated JavaScript interpreter instance&period;
| link:#mrdocs-js-Object[`Object`] 
| Object wrapper for JavaScript values&period;
| link:#mrdocs-js-Scope[`Scope`] 
| A JavaScript scope for value lifetime management&period;
| link:#mrdocs-js-String[`String`] 
| String wrapper for JavaScript values&period;
| link:#mrdocs-js-Value[`Value`] 
| An ECMAScript value&period;
|===

== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Type[`Type`] 
| Types of values&period;
|===

== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-operator_and-0c[`operator&amp;&amp;`] 
| Return the first Value that is not truthy, or the last one&period;
| link:#mrdocs-js-operator_or-0e1[`operator&verbar;&verbar;`] 
| Return the first Value that is truthy, or the last one&period;
| link:#mrdocs-js-registerHelper[`registerHelper`] 
| Register a JavaScript helper function
| link:#mrdocs-js-swap[`swap`] 
| Swap two values&period;
| link:#mrdocs-js-toString[`toString`] 
| Return value as a string&period;
| link:#mrdocs-js-operator_eq-0c[`operator&equals;&equals;`] 
| Compare two values for equality&period;
| link:#mrdocs-js-operator_not_eq-076[`operator!&equals;`] 
| Inequality operators
| link:#mrdocs-js-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare two values for inequality&period;
|===

Lightweight handle to a JavaScript array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Array;
----

Boolean wrapper for JavaScript values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Boolean;
----

An isolated JavaScript interpreter instance&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Context;
----

== Description

Each Context owns an independent JerryScript interpreter with its own 512KB heap&period; Multiple Contexts can exist simultaneously, allowing parallel JavaScript execution across threads (each thread should use its own Context)&period;

To execute scripts or create values, construct a link:#mrdocs-js-Scope[`Scope`] from the Context&period; The Scope activates the Context on the current thread and provides methods for script evaluation and value creation&period;

Contexts can be copied (via copy constructor)&semi; copies share the same underlying interpreter and heap&period; This is useful for passing context references without transferring ownership&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Context-Impl[`Impl`] 
| Shared runtime data for a JavaScript context&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Context-2constructor-02[`Context`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-js-Context-2destructor[`&#126;Context`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-js-Context-operator_assign[`operator&equals;`]  [.small]#[deleted]#
| Copy assignment (deleted)&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-js-Scope[mrdocs::js::Scope]`
| A JavaScript scope for value lifetime management&period;
| `link:#mrdocs-js-Value[mrdocs::js::Value]`
| An ECMAScript value&period;
|===

== See Also

Scope

Shared runtime data for a JavaScript context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Impl;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Context-2constructor-01[Context]();
----

[.small]#link:#mrdocs-js-Context-2constructor-01[_» more&period;&period;&period;_]#

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Context-2constructor-00[Context](link:#mrdocs-js-Context[Context] const& other) noexcept;
----

[.small]#link:#mrdocs-js-Context-2constructor-00[_» more&period;&period;&period;_]#

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Context();
----

== Description

Creates a new JavaScript interpreter with its own 512KB heap&period; The interpreter is initialized but inactive until a Scope is created&period;

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Context(link:#mrdocs-js-Context[Context] const& other) noexcept;
----

== Description

Creates a new Context that shares the same underlying interpreter&period; Both Contexts reference the same heap and global object&period; This is useful for passing Context references without transferring ownership&period;

[NOTE]
====
Operations on the shared interpreter are serialized by a mutex, so only one thread can execute at a time per interpreter&period;

====

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Context();
----

== Description

Releases this reference to the interpreter&period; The underlying JerryScript context is destroyed when the last Context (or Value) referencing it is destroyed&period;

Copy assignment (deleted)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Context[Context]&
operator&equals;(link:#mrdocs-js-Context[Context] const& other) = delete;
----

== Description

Copy assignment is deleted to prevent accidental interpreter sharing&period; Use the copy constructor explicitly if sharing is intended&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Object wrapper for JavaScript values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Object;
----

A JavaScript scope for value lifetime management&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Scope;
----

== Description

Scope serves two purposes&colon;

1&period; *Value batch tracking*&colon; Tracks JavaScript values created within the scope and releases one reference to each when the scope ends&period; Values that were copied elsewhere (e&period;g&period;, returned from functions, stored in containers) survive because they hold their own references&period; Values that remained local to the scope are freed&period;

2&period; *Thread safety*&colon; Each Scope operation briefly locks the Context&apos;s mutex and activates the context (sets TLS)&period; This allows multiple threads to share a Context while serializing access to the interpreter&period; Values obtained from a Scope can be used from other threads&semi; they will acquire the lock as needed&period;

This provides deterministic cleanup similar to stack&hyphen;based engines (Lua, Duktape) while working with JerryScript&apos;s reference&hyphen;counted heap&period;

[NOTE]
====
Multiple Scopes can exist for the same Context (even in different threads), but operations are serialized by the Context&apos;s mutex&period;

====

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Scope-2constructor[`Scope`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-js-Scope-2destructor[`&#126;Scope`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-js-Scope-compile_function[`compile&lowbar;function`] 
| Compile a script and push results to stack&period;
| link:#mrdocs-js-Scope-compile_script[`compile&lowbar;script`] 
| Compile a script and push results to stack&period;
| link:#mrdocs-js-Scope-eval[`eval`] 
| Compile and run a expression&period;
| link:#mrdocs-js-Scope-getGlobal[`getGlobal`] 
| Return a global object if it exists&period;
| link:#mrdocs-js-Scope-getGlobalObject[`getGlobalObject`] 
| Return the global object&period;
| link:#mrdocs-js-Scope-pushArray[`pushArray`] 
| Push a new array to the stack
| link:#mrdocs-js-Scope-pushBoolean[`pushBoolean`] 
| Push a boolean to the stack
| link:#mrdocs-js-Scope-pushDouble[`pushDouble`] 
| Push a double to the stack
| link:#mrdocs-js-Scope-pushInteger[`pushInteger`] 
| Push an integer to the stack
| link:#mrdocs-js-Scope-pushObject[`pushObject`] 
| Push a new object to the stack
| link:#mrdocs-js-Scope-pushString[`pushString`] 
| Push a string to the stack
| link:#mrdocs-js-Scope-script[`script`] 
| Compile and run a script&period;
| link:#mrdocs-js-Scope-setGlobal[`setGlobal`] 
| Set a global object&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Scope(link:#mrdocs-js-Context[Context] const& ctx) noexcept;
----

== Description

Records the context for this scope&period; The context&apos;s mutex is NOT held for the lifetime of the Scope&semi; instead, each operation locks briefly&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ctx*
| The context to use&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Scope();
----

== Description

Releases one reference to each value created within this scope&period; Values whose reference count drops to zero are freed&semi; values that were copied elsewhere survive&period;

Compile a script and push results to stack&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
compile&lowbar;function(std::string&lowbar;view jsCode);
----

== Description

Coerces provided source into a callable function&period; First parenthesizes the source to force expression parsing&semi; if that fails, executes the script and returns the first declared function name&period; Ambiguous sources may run side effects twice (expression attempt &plus; fallback) matching existing behavior&period;

== Return Value

A function object that can be called&period; The function object has the number of arguments defined in the code&period; If the code does not define a function, an error is returned&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *jsCode*
| The JavaScript code to compile&period;
|===

Compile a script and push results to stack&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
compile&lowbar;script(std::string&lowbar;view jsCode);
----

== Description

Wraps arbitrary script text in an IIFE that calls `eval` when invoked, returning the last expression result&period; Function declarations are rejected to avoid silent re&hyphen;declarations&period; Side effects in the script run at invocation time&period;

== Return Value

A function object that can be called&period; The function object has zero arguments&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *jsCode*
| The JavaScript code to compile&period;
|===

Compile and run a expression&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
eval(std::string&lowbar;view jsCode);
----

== Description

This function compiles and executes the specified JavaScript code&period; The script can be used to execute commands or define global variables in the parent context&period;

It evaluates the ECMAScript source code and converts any internal errors to link:#mrdocs-Error[`Error`]&period;

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *jsCode*
| The JavaScript code to execute&period;
|===

Return a global object if it exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
getGlobal(std::string&lowbar;view name);
----

== Description

This function returns a link:#mrdocs-js-Value[`Value`] that represents a global variable in the parent context&period;

If the variable does not exist, an error is returned&period;

== Return Value

a global object if it exists&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The name of the global variable&period;
|===

Return the global object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
getGlobalObject();
----

== Description

This function returns a link:#mrdocs-js-Value[`Value`] that represents the global object in the parent context&period;

The global object is the root of the ECMAScript object hierarchy and is the value returned by the global `this` expression&period;

If the global object does not exist, an error is returned&period;

== Return Value

the global object&period;

Push a new array to the stack

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
pushArray();
----

== Return Value

An ECMAScript value&period;

Push a boolean to the stack

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
pushBoolean(bool value);
----

== Return Value

A Value representing the boolean&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The boolean value to push&period;
|===

Push a double to the stack

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
pushDouble(double value);
----

== Return Value

A Value representing the double&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The double value to push&period;
|===

Push an integer to the stack

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
pushInteger(int64&lowbar;t value);
----

== Return Value

A Value representing the integer&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The integer value to push&period;
|===

Push a new object to the stack

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
pushObject();
----

== Return Value

An ECMAScript value&period;

Push a string to the stack

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
pushString(std::string&lowbar;view value);
----

== Return Value

A Value representing the string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The string value to push&period; The string is copied to the internal heap&period;
|===

Compile and run a script&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
script(std::string&lowbar;view jsCode);
----

== Description

This function compiles and executes the specified JavaScript code&period; The script can be used to execute commands or define global variables in the parent context&period;

ES module import&sol;export is not enabled&semi; scripts must be self&hyphen;contained or rely on globals&period;

It evaluates the ECMAScript source code and converts any internal errors to link:#mrdocs-Error[`Error`]&period;

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *jsCode*
| The JavaScript code to execute&period;
|===

Set a global object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
setGlobal(
    std::string&lowbar;view name,
    link:#mrdocs-dom-Value[dom::Value] const& value);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The name of the global variable&period;
| *value*
| The value to set&period;
|===

String wrapper for JavaScript values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class String;
----

An ECMAScript value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Value;
----

== Description

This class represents a value in the JavaScript interpreter&period;

A value is a variable that is defined in a link:#mrdocs-js-Scope[`Scope`]&period; It can be a primitive type or an object&period;

A link:#mrdocs-js-Value-2constructor-0a[`Value`] not associated with a link:#mrdocs-js-Scope[`Scope`] is undefined&period;

The user is responsible for ensuring that the lifetime of a link:#mrdocs-js-Value-2constructor-0a[`Value`] does not exceed the lifetime of the link:#mrdocs-js-Scope[`Scope`] that created it&period;

A value can be converted to a DOM value using the link:#mrdocs-js-Value-getDom[`getDom`] function&period;

Generic JavaScript value wrapper&period;

An ECMAScript value&period;

This class represents a value in the JavaScript interpreter&period;

A value is a variable that is defined in a link:#mrdocs-js-Scope[`Scope`]&period; It can be a primitive type or an object&period;

A link:#mrdocs-js-Value-2constructor-0a[`Value`] not associated with a link:#mrdocs-js-Scope[`Scope`] is undefined&period;

The user is responsible for ensuring that the lifetime of a link:#mrdocs-js-Value-2constructor-0a[`Value`] does not exceed the lifetime of the link:#mrdocs-js-Scope[`Scope`] that created it&period;

A value can be converted to a DOM value using the link:#mrdocs-js-Value-getDom[`getDom`] function&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Value-2constructor-0a[`Value`]         [.small]#[constructor]#
| Constructor
| link:#mrdocs-js-Value-2destructor[`&#126;Value`] [.small]#[destructor]#
| Destructor
| link:#mrdocs-js-Value-operator_assign-03[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-js-Value-apply-05[`apply`] 
| `apply` overloads
| link:#mrdocs-js-Value-call[`call`] 
| Invoke a function&period;
| link:#mrdocs-js-Value-empty[`empty`] 
| Return if an Array or Object is empty&period;
| link:#mrdocs-js-Value-erase[`erase`] 
| Remove a property from an object if it exists&period;
| link:#mrdocs-js-Value-exists[`exists`] 
| Return true if a key exists&period;
| link:#mrdocs-js-Value-get-09[`get`] 
| `get` overloads
| link:#mrdocs-js-Value-getArray[`getArray`] 
| Return the underlying array&period;
| link:#mrdocs-js-Value-getBool[`getBool`] 
| Return the underlying boolean value&period;
| link:#mrdocs-js-Value-getDom[`getDom`] 
| Return the value as a dom&colon;&colon;Value
| link:#mrdocs-js-Value-getDouble[`getDouble`] 
| Return the underlying double value&period;
| link:#mrdocs-js-Value-getFunction[`getFunction`] 
| Return the underlying array&period;
| link:#mrdocs-js-Value-getInteger[`getInteger`] 
| Return the underlying integer value&period;
| link:#mrdocs-js-Value-getObject[`getObject`] 
| Return the underlying object&period;
| link:#mrdocs-js-Value-getString[`getString`] 
| Return the underlying string
| link:#mrdocs-js-Value-isArray[`isArray`] 
| Check if the value is an array&period;
| link:#mrdocs-js-Value-isBoolean[`isBoolean`] 
| Check if the value is a boolean&period;
| link:#mrdocs-js-Value-isDouble[`isDouble`] 
| Check if the value is a floating point number&period;
| link:#mrdocs-js-Value-isFunction[`isFunction`] 
| Check if the value is a function&period;
| link:#mrdocs-js-Value-isInteger[`isInteger`] 
| Check if the value is an integer number&period;
| link:#mrdocs-js-Value-isNull[`isNull`] 
| Check if the value is null&period;
| link:#mrdocs-js-Value-isNumber[`isNumber`] 
| Check if the value is a number&period;
| link:#mrdocs-js-Value-isObject[`isObject`] 
| Check if the value is an object&period;
| link:#mrdocs-js-Value-isString[`isString`] 
| Check if the value is a string&period;
| link:#mrdocs-js-Value-isTruthy[`isTruthy`] 
| Determine if a value is truthy
| link:#mrdocs-js-Value-isUndefined[`isUndefined`] 
| Check if the value is undefined&period;
| link:#mrdocs-js-Value-lookup[`lookup`] 
| Lookup a sequence of keys&period;
| link:#mrdocs-js-Value-operator_call[`operator()`] 
| Invoke a function&period;
| link:#mrdocs-js-Value-operator_subs-0f[`operator&lsqb;&rsqb;`] 
| Subscript operators
| link:#mrdocs-js-Value-set-08a[`set`] 
| Set or replace the value for a given key&period;
| link:#mrdocs-js-Value-size[`size`] 
| Return if an Array or Object is empty&period;
| link:#mrdocs-js-Value-swap[`swap`] 
| Swap two values&period;
| link:#mrdocs-js-Value-type[`type`] 
| Return the type of the value&period;
| link:#mrdocs-js-Value-2conversion-07[`operator std::string`] 
| Return the string&period;
| link:#mrdocs-js-Value-2conversion-0d[`operator bool`] 
| Determine if a value is truthy
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Value-2constructor-0d[`Value`]         [.small]#[constructor]#
| Wrap an existing engine value without transferring ownership&period;
|===

== Protected Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-js-Value-impl_[`impl&lowbar;`] 
| Shared lifetime owner for the underlying JavaScript runtime&period;
| link:#mrdocs-js-Value-val_[`val&lowbar;`] 
| Opaque engine value handle stored as an integer (engine&hyphen;specific inside the implementation)&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-js-toString[mrdocs::js::toString]`
| Return value as a string&period;
| `link:#mrdocs-js-operator_and-05[mrdocs::js::operator&amp;&amp;]`
| 
| `link:#mrdocs-js-operator_and-0f[mrdocs::js::operator&amp;&amp;]`
| 
| `link:#mrdocs-js-operator_and-03[mrdocs::js::operator&amp;&amp;]`
| Return the first Value that is not truthy, or the last one&period;
| `link:#mrdocs-js-operator_or-0ea[mrdocs::js::operator&verbar;&verbar;]`
| 
| `link:#mrdocs-js-operator_or-05[mrdocs::js::operator&verbar;&verbar;]`
| 
| `link:#mrdocs-js-operator_or-0a[mrdocs::js::operator&verbar;&verbar;]`
| Return the first Value that is truthy, or the last one&period;
| `link:#mrdocs-js-operator_3way[mrdocs::js::operator&lt;&equals;&gt;]`
| Compare two values for inequality&period;
| `link:#mrdocs-js-operator_not_eq-03[mrdocs::js::operator!&equals;]`
| 
| `link:#mrdocs-js-operator_not_eq-079[mrdocs::js::operator!&equals;]`
| 
| `link:#mrdocs-js-operator_not_eq-0e[mrdocs::js::operator!&equals;]`
| Inequality operator
| `link:#mrdocs-js-operator_eq-09[mrdocs::js::operator&equals;&equals;]`
| 
| `link:#mrdocs-js-operator_eq-06[mrdocs::js::operator&equals;&equals;]`
| 
| `link:#mrdocs-js-operator_eq-0e[mrdocs::js::operator&equals;&equals;]`
| Compare two values for equality&period;
| `link:#mrdocs-js-swap[mrdocs::js::swap]`
| Swap two values&period;
| `link:#mrdocs-js-Scope[mrdocs::js::Scope]`
| A JavaScript scope for value lifetime management&period;
|===

== See Also

Scope

Type

Constructor

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

Constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value-2constructor-05[Value]() noexcept;
----

[.small]#link:#mrdocs-js-Value-2constructor-05[_» more&period;&period;&period;_]#

Constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value-2constructor-02f2[Value](link:#mrdocs-js-Value[Value] const& other);
----

[.small]#link:#mrdocs-js-Value-2constructor-02f2[_» more&period;&period;&period;_]#

Constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value-2constructor-02f1[Value](link:#mrdocs-js-Value[Value]&& other) noexcept;
----

[.small]#link:#mrdocs-js-Value-2constructor-02f1[_» more&period;&period;&period;_]#

Constructor

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value() noexcept;
----

== Description

Construct a value that is not associated with a link:#mrdocs-js-Scope[`Scope`]&period;

The value is undefined&period;

Constructor

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-js-Value[Value] const& other);
----

== Description

Duplicates the underlying engine handle held by `value` and shares the same runtime state&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Constructor

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-js-Value[Value]&& other) noexcept;
----

== Description

The function associates the existing value with this object&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Destructor

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Value();
----

== Description

Releases the underlying engine handle&semi; lifetime is tied to the shared link:#mrdocs-js-Context-Impl[`Context&colon;&colon;Impl`], not to a stack frame&period;

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

Copy assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]&
link:#mrdocs-js-Value-operator_assign-0f[operator&equals;](link:#mrdocs-js-Value[Value] const& other);
----

[.small]#link:#mrdocs-js-Value-operator_assign-0f[_» more&period;&period;&period;_]#

Move assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]&
link:#mrdocs-js-Value-operator_assign-06[operator&equals;](link:#mrdocs-js-Value[Value]&& other) noexcept;
----

[.small]#link:#mrdocs-js-Value-operator_assign-06[_» more&period;&period;&period;_]#

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]&
operator&equals;(link:#mrdocs-js-Value[Value] const& other);
----

== Description

Duplicates the underlying engine handle held by `value` and shares the same runtime state&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]&
operator&equals;(link:#mrdocs-js-Value[Value]&& other) noexcept;
----

== Description

The function associates the existing value with this object&period;

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

`apply` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

Invoke a function with an initializer&lowbar;list of arguments&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
link:#mrdocs-js-Value-apply-04[apply](std::initializer&lowbar;list&lt;dom::Value&gt; args) const;
----

[.small]#link:#mrdocs-js-Value-apply-04[_» more&period;&period;&period;_]#

Invoke a function with a span of arguments&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
link:#mrdocs-js-Value-apply-02[apply](std::span&lt;dom::Value const&gt; args) const;
----

[.small]#link:#mrdocs-js-Value-apply-02[_» more&period;&period;&period;_]#

== Return Value

The return value of the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments to pass to the JavaScript function&period;
|===

Invoke a function with an initializer&lowbar;list of arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
apply(std::initializer&lowbar;list&lt;dom::Value&gt; args) const;
----

== Return Value

The return value of the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments to pass to the JavaScript function&period;
|===

Invoke a function with a span of arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
apply(std::span&lt;dom::Value const&gt; args) const;
----

== Return Value

The return value of the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments to pass to the JavaScript function&period;
|===

Invoke a function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;dom::Value&gt;&period;&period;&period; Args&gt;
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
call(Args&&&period;&period;&period; args) const;
----

== Return Value

The return value of the method&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Zero or more arguments to pass to the method&period;
|===

Return if an Array or Object is empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
empty() const;
----

== Return Value

if an Array or Object is empty&period;

Remove a property from an object if it exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
erase(std::string&lowbar;view key) const;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| Property name to erase from the current object&period;
|===

Return true if a key exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
exists(std::string&lowbar;view key) const;
----

== Return Value

`true` if the key exists, `false` otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to check for&period;
|===

`get` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

Return the element at a given index&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
link:#mrdocs-js-Value-get-08[get](std::size&lowbar;t i) const;
----

[.small]#link:#mrdocs-js-Value-get-08[_» more&period;&period;&period;_]#

Return the element for a given key&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
link:#mrdocs-js-Value-get-0d[get](std::string&lowbar;view key) const;
----

[.small]#link:#mrdocs-js-Value-get-0d[_» more&period;&period;&period;_]#

Return the element at a given index or key&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
link:#mrdocs-js-Value-get-02[get](link:#mrdocs-dom-Value[dom::Value] const& i) const;
----

[.small]#link:#mrdocs-js-Value-get-02[_» more&period;&period;&period;_]#

Return the element for a given key&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;std::string&lowbar;view&gt; S&gt;
link:#mrdocs-js-Value[Value]
link:#mrdocs-js-Value-get-0a[get](S const& key) const;
----

[.small]#link:#mrdocs-js-Value-get-0a[_» more&period;&period;&period;_]#

== Return Value

* The element at the given index, or a Value of type `Kind&colon;&colon;Undefined` if the index is out of range&period;
* The element for the given key, or a Value of type Kind&colon;&colon;Undefined if the key is not found&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| The index of the element to return&period;
| *key*
| The key to look up&period;
|===

Return the element at a given index&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
get(std::size&lowbar;t i) const;
----

== Return Value

The element at the given index, or a Value of type `Kind&colon;&colon;Undefined` if the index is out of range&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| The index of the element to return&period;
|===

Return the element for a given key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
get(std::string&lowbar;view key) const;
----

== Description

If the Value is not an object, or the key is not found, a Value of type Kind&colon;&colon;Undefined is returned&period;

== Return Value

The element for the given key, or a Value of type Kind&colon;&colon;Undefined if the key is not found&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to look up&period;
|===

Return the element at a given index or key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
get(link:#mrdocs-dom-Value[dom::Value] const& i) const;
----

== Return Value

the element at a given index or key&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| A variant container for any kind of Dom value&period;
|===

Return the element for a given key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;std::string&lowbar;view&gt; S&gt;
link:#mrdocs-js-Value[Value]
get(S const& key) const;
----

== Description

If the Value is not an object, or the key is not found, a Value of type Kind&colon;&colon;Undefined is returned&period;

== Return Value

The element for the given key, or a Value of type Kind&colon;&colon;Undefined if the key is not found&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to look up&period;
|===

Return the underlying array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[dom::Array]
getArray() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isArray()`

====

== Return Value

the underlying array&period;

Return the underlying boolean value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
getBool() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isBoolean()`

====

== Return Value

the underlying boolean value&period;

Return the value as a dom&colon;&colon;Value

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
getDom() const;
----

== Description

This function returns the value as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period;

If the value is a primitive type, it is converted to a DOM primitive&period;

If the value is an object, a type with reference semantics to access the underlying DOM object is returned&period;

== Return Value

the value as a dom&colon;&colon;Value

Return the underlying double value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
double
getDouble() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isNumber()`

====

== Return Value

the underlying double value&period;

Return the underlying array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Function[dom::Function]
getFunction() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isFunction()`

====

== Return Value

the underlying array&period;

Return the underlying integer value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
int64&lowbar;t
getInteger() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isNumber()`

====

== Return Value

the underlying integer value&period;

Return the underlying object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[dom::Object]
getObject() const noexcept;
----

== Description

[NOTE]
====
Behaviour is undefined if `!isObject()`

====

== Return Value

the underlying object&period;

Return the underlying string

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
getString() const;
----

== Description

This function returns the value as a string&period;

This function performs no coercions&period; If the value is not a string, it is not converted to a string&period;

JerryScript allocates a new buffer for string extraction, so the returned value is an owning `std&colon;&colon;string` rather than a view&period;

[NOTE]
====
Behaviour is undefined if `!isString()`

====

== Return Value

the underlying string

Check if the value is an array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isArray() const noexcept;
----

== Return Value

`true` if the value is an array, `false` otherwise

Check if the value is a boolean&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isBoolean() const noexcept;
----

== Return Value

`true` if the value is a boolean, `false` otherwise

Check if the value is a floating point number&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isDouble() const noexcept;
----

== Return Value

`true` if the value is a number but not an integer, `false` otherwise

Check if the value is a function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isFunction() const noexcept;
----

== Return Value

`true` if the value is a function, `false` otherwise

Check if the value is an integer number&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isInteger() const noexcept;
----

== Description

All numbers are internally represented by IEEE doubles, which are capable of representing all integers up to 53 bits accurately&period;

This function returns `true` if the value is a number with no precision loss when representing an integer&period;

When `isNumber()` is `true`, the function behaves as if evaluating the condition `d &equals;&equals; static&lowbar;cast&lt;double&gt;(static&lowbar;cast&lt;int&gt;(d))` where `d` is the result of `toDouble()`&period;

== Return Value

`true` if the value is a number with no fractional part, `false` otherwise

Check if the value is null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isNull() const noexcept;
----

== Return Value

`true` if the value is null, `false` otherwise

Check if the value is a number&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isNumber() const noexcept;
----

== Description

In ECMA, the number type is an IEEE double, including &plus;&sol;&hyphen; Infinity and NaN values&period;

Zero sign is also preserved&period;

An IEEE double can represent all integers up to 53 bits accurately&period;

The user should not rely on NaNs preserving their exact non&hyphen;normalized form&period;

== Return Value

`true` if the value is a number, `false` otherwise

Check if the value is an object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isObject() const noexcept;
----

== Description

Check if the value is an object but not an array or function&period;

While in ECMA anything with properties is an object, this function returns `false` for arrays and functions&period;

Properties are key&hyphen;value pairs with a string key and an arbitrary value, including undefined&period;

== Return Value

`true` if the value is an object, `false` otherwise

Check if the value is a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isString() const noexcept;
----

== Return Value

`true` if the value is a string, `false` otherwise

Determine if a value is truthy

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isTruthy() const noexcept;
----

== Description

A value is truthy if it is a boolean and is true, a number and not zero, or an non&hyphen;empty string, array or object&period;

== Return Value

`true` if the value is truthy, `false` otherwise

Check if the value is undefined&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isUndefined() const noexcept;
----

== Return Value

`true` if the value is undefined, `false` otherwise

Lookup a sequence of keys&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
lookup(std::string&lowbar;view keys) const;
----

== Description

This function is equivalent to calling `get` multiple times, once for each key in the sequence of dot&hyphen;separated keys&period;

== Return Value

The value at the end of the sequence, or a Value of type Kind&colon;&colon;Undefined if any key is not found&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *keys*
| A sequence of keys separated by dots&period;
|===

Invoke a function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
link:#mrdocs-js-Value[Value]
operator()(Args&&&period;&period;&period; args) const;
----

== Return Value

The return value of the method&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Zero or more arguments to pass to the method&period;
|===

Subscript operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

Return the element for an array index&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
link:#mrdocs-js-Value-operator_subs-024b[operator&lsqb;&rsqb;](std::size&lowbar;t index) const;
----

[.small]#link:#mrdocs-js-Value-operator_subs-024b[_» more&period;&period;&period;_]#

Return the element for a property name&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
link:#mrdocs-js-Value-operator_subs-0243[operator&lsqb;&rsqb;](std::string&lowbar;view key) const;
----

[.small]#link:#mrdocs-js-Value-operator_subs-0243[_» more&period;&period;&period;_]#

== Return Value

* The element for the given index, or undefined if out of bounds &sol; not an array&period;
* The element for the given key, or undefined if missing &sol; not an object&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *index*
| Zero&hyphen;based array index to fetch when the value is an array&period;
| *key*
| Property name to fetch from the current object&period;
|===

Return the element for an array index&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
operator&lsqb;&rsqb;(std::size&lowbar;t index) const;
----

== Return Value

The element for the given index, or undefined if out of bounds &sol; not an array&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *index*
| Zero&hyphen;based array index to fetch when the value is an array&period;
|===

Return the element for a property name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
operator&lsqb;&rsqb;(std::string&lowbar;view key) const;
----

== Return Value

The element for the given key, or undefined if missing &sol; not an object&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| Property name to fetch from the current object&period;
|===

Set or replace the value for a given key&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

Set or replace the value for a given key&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-js-Value-set-089[set](
    std::string&lowbar;view key,
    link:#mrdocs-js-Value[Value] const& value) const;
----

[.small]#link:#mrdocs-js-Value-set-089[_» more&period;&period;&period;_]#

Set or replace the value for a given key&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-js-Value-set-0f[set](
    std::string&lowbar;view key,
    link:#mrdocs-dom-Value[dom::Value] const& value) const;
----

[.small]#link:#mrdocs-js-Value-set-0f[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to set&period;
| *value*
| The value to set&period;
|===

Set or replace the value for a given key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
set(
    std::string&lowbar;view key,
    link:#mrdocs-js-Value[Value] const& value) const;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to set&period;
| *value*
| The value to set&period;
|===

Set or replace the value for a given key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
set(
    std::string&lowbar;view key,
    link:#mrdocs-dom-Value[dom::Value] const& value) const;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to set&period;
| *value*
| The value to set&period;
|===

Return if an Array or Object is empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
size() const;
----

== Return Value

if an Array or Object is empty&period;

Swap two values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(link:#mrdocs-js-Value[Value]& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| An ECMAScript value&period;
|===

Return the type of the value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Type[Type]
type() const noexcept;
----

== Description

This function returns the JavaScript type of the value&period;

The type can represent a primitive type (such as boolean, number, and string) or an object&period;

When the type is an object, the return type also classifies the object as an array or function&period;

An array is an object with the internal ECMAScript class `Array` or a Proxy wrapping an `Array`&period;

A function is an object with the internal ECMAScript class `Function`&period;

== Return Value

the type of the value&period;

Return the string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
operator std::string() const noexcept;
----

== Return Value

the string&period;

Determine if a value is truthy

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
operator bool() const noexcept;
----

== Description

A value is truthy if it is a boolean and is true, a number and not zero, or an non&hyphen;empty string, array or object&period;

== Return Value

`true` if the value is truthy, `false` otherwise

Wrap an existing engine value without transferring ownership&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(
    uint32&lowbar;t val,
    std::shared&lowbar;ptr&lt;Context::Impl&gt; impl) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *val*
| JerryScript value handle that will be acquired&period;
| *impl*
| Shared runtime state that keeps the context alive&period;
|===

Shared lifetime owner for the underlying JavaScript runtime&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::shared&lowbar;ptr&lt;Context::Impl&gt; impl&lowbar;;
----

Opaque engine value handle stored as an integer (engine&hyphen;specific inside the implementation)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
uint32&lowbar;t val&lowbar;;
----

Types of values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class Type : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `undefined` 
| The value is undefined
| `null` 
| The value is null
| `boolean` 
| The value is a boolean
| `number` 
| The value is a number
| `string` 
| The value is a string
| `object` 
| The value is an object
| `function` 
| The value is a function
| `array` 
| The value is an array
|===

Return the first Value that is not truthy, or the last one&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-js-operator_and-0f[operator&amp;&amp;](
    S const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_and-0f[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-js-operator_and-05[operator&amp;&amp;](
    link:#mrdocs-js-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_and-05[_» more&period;&period;&period;_]#

Return the first Value that is not truthy, or the last one&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
link:#mrdocs-js-operator_and-03[operator&amp;&amp;](
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs);
----

[.small]#link:#mrdocs-js-operator_and-03[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&amp;&amp;(
    S const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&amp;&amp;(
    link:#mrdocs-js-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

Return the first Value that is not truthy, or the last one&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
operator&amp;&amp;(
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs);
----

== Description

This function is equivalent to the JavaScript `&amp;&amp;` operator&period;

== Return Value

the first Value that is not truthy, or the last one&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Return the first Value that is truthy, or the last one&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-js-operator_or-05[operator&verbar;&verbar;](
    S const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_or-05[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-js-operator_or-0ea[operator&verbar;&verbar;](
    link:#mrdocs-js-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_or-0ea[_» more&period;&period;&period;_]#

Return the first Value that is truthy, or the last one&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
link:#mrdocs-js-operator_or-0a[operator&verbar;&verbar;](
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs);
----

[.small]#link:#mrdocs-js-operator_or-0a[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&verbar;&verbar;(
    S const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&verbar;&verbar;(
    link:#mrdocs-js-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

Return the first Value that is truthy, or the last one&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-js-Value[Value]
operator&verbar;&verbar;(
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs);
----

== Description

This function is equivalent to the JavaScript `&verbar;&verbar;` operator&period;

== Return Value

the first Value that is truthy, or the last one&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Register a JavaScript helper function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
link:#mrdocs-Expected-0a[Expected&lt;void, Error&gt;]
registerHelper(
    link:#mrdocs-Handlebars[mrdocs::Handlebars]& hbs,
    std::string&lowbar;view name,
    link:#mrdocs-js-Context[Context]& ctx,
    std::string&lowbar;view script);
----

== Description

This function registers a JavaScript function as a helper function that can be called from Handlebars templates&period;

The helper source is resolved in the following order&colon;

1&period; *Parenthesized eval* &hyphen; wraps the script in parentheses and evaluates&period; Handles function declarations without side effects&period; Example&colon; `&quot;function add(a, b) &lcub; return a &plus; b&semi; &rcub;&quot;`

2&period; *Direct eval* &hyphen; evaluates the script as&hyphen;is&period; Handles IIFEs and expressions that return functions&period; Example&colon; `&quot;(function()&lcub; return function(x)&lcub; return x&ast;2&semi; &rcub;&semi; &rcub;)()&quot;`

3&period; *Global lookup* &hyphen; looks up the helper name on the global object&period; Handles scripts that define globals before returning&period; Example&colon; `&quot;var helper &equals; function(x)&lcub; return x&semi; &rcub;&semi; helper&semi;&quot;`

The resolved function is stored on the shared `MrDocsHelpers` global object and registered with Handlebars&period; When invoked, positional arguments are passed to the JavaScript function (the Handlebars options object is stripped to avoid expensive recursive conversion of symbol contexts)&period;

== Return Value

Success, or an error if the script could not be resolved to a function

== Parameters

[cols="1,4"]
|===
|Name|Description

| *hbs*
| The Handlebars instance to register the helper into
| *name*
| The name of the helper function
| *ctx*
| The JavaScript context to use
| *script*
| The JavaScript code that defines the helper function
|===

Swap two values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
swap(
    link:#mrdocs-js-Value[Value]& v0,
    link:#mrdocs-js-Value[Value]& v1) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v0*
| An ECMAScript value&period;
| *v1*
| An ECMAScript value&period;
|===

Return value as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
toString(link:#mrdocs-js-Value[Value] const& value);
----

== Description

This function coerces any value to a string&period;

== Return Value

value as a string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| An ECMAScript value&period;
|===

Compare two values for equality&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-js-operator_eq-09[operator&equals;&equals;](
    link:#mrdocs-js-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_eq-09[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-js-operator_eq-06[operator&equals;&equals;](
    S const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_eq-06[_» more&period;&period;&period;_]#

Compare two values for equality&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-js-operator_eq-0e[operator&equals;&equals;](
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_eq-0e[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&equals;&equals;(
    link:#mrdocs-js-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&equals;&equals;(
    S const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

Compare two values for equality&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

== Description

This operator uses strict equality, meaning that the types must match exactly, and for objects and arrays the children must match exactly&period;

The `&equals;&equals;` operator behaves differently for objects compared to primitive data types like numbers and strings&period; When comparing objects using `&equals;&equals;`, it checks for reference equality, not structural equality&period;

This means that two objects are considered equal with `&equals;&equals;&equals;` only if they reference the exact same object in memory&period;

[NOTE]
====
In JavaScript, this is equivalent to the `&equals;&equals;&equals;` operator, which does not perform type conversions&period;

====

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Inequality operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-js-operator_not_eq-03[operator!&equals;](
    link:#mrdocs-js-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_not_eq-03[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-js-operator_not_eq-079[operator!&equals;](
    S const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_not_eq-079[_» more&period;&period;&period;_]#

Inequality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-js-operator_not_eq-0e[operator!&equals;](
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

[.small]#link:#mrdocs-js-operator_not_eq-0e[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator!&equals;(
    link:#mrdocs-js-Value[Value] const& lhs,
    S const& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator!&equals;(
    S const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

Inequality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator!&equals;(
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

== Return Value

`true` if the objects are not equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compare two values for inequality&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;JavaScript&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-js-Value[Value] const& lhs,
    link:#mrdocs-js-Value[Value] const& rhs) noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Lua interop helpers for the optional scripting&sol;backend integration&period;

== Description

This namespace contains glue for pushing&sol;popping values, registering functions, and safely executing snippets so embedders can enable Lua without duplicating binding code&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Access[`Access`] 
| Internal tag granting access to lua internals&period;
| link:#mrdocs-lua-Context[`Context`] 
| A reference to an instance of a Lua interpreter&period;
| link:#mrdocs-lua-Function[`Function`] 
| A Lua function&period;
| link:#mrdocs-lua-Param[`Param`] 
| A lazy container to push values to the Lua stack&period;
| link:#mrdocs-lua-Scope[`Scope`] 
| Stack scope guard for Lua calls&period;
| link:#mrdocs-lua-String[`String`] 
| A Lua string&period;
| link:#mrdocs-lua-Table[`Table`] 
| A Lua table&period;
| link:#mrdocs-lua-Value[`Value`] 
| A Lua value&period;
| link:#mrdocs-lua-zstring[`zstring`] 
| A null&hyphen;terminated string&period;
| link:#mrdocs-lua-FunctionPtr[`FunctionPtr`] 
| Pointer to a Lua&hyphen;callable function returning Value&period;
|===

== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Type[`Type`] 
| Types of values&period;
|===

Pointer to a Lua&hyphen;callable function returning Value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using FunctionPtr = link:#mrdocs-lua-Value[Value](*)(std::vector&lt;Value&gt;);
----

Internal tag granting access to lua internals&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Access;
----

A reference to an instance of a Lua interpreter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Context;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Context-2constructor-02[`Context`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-lua-Context-2destructor[`&#126;Context`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-lua-Context-operator_assign[`operator&equals;`]  [.small]#[deleted]#
| Copy assignment&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Scope[mrdocs::lua::Scope]`
| Stack scope guard for Lua calls&period;
| `link:#mrdocs-lua-Access[mrdocs::lua::Access]`
| Internal tag granting access to lua internals&period;
|===

Constructor&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Context-2constructor-0e[Context]();
----

[.small]#link:#mrdocs-lua-Context-2constructor-0e[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Context-2constructor-06[Context](link:#mrdocs-lua-Context[Context] const& other) noexcept;
----

[.small]#link:#mrdocs-lua-Context-2constructor-06[_» more&period;&period;&period;_]#

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Context();
----

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Context(link:#mrdocs-lua-Context[Context] const& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Context();
----

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Context[Context]&
operator&equals;(link:#mrdocs-lua-Context[Context] const& other) = delete;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

A Lua function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Function
    : public link:#mrdocs-lua-Value[Value]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Value[Value]`
| A Lua value&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Function-2constructor-05[`Function`]         [.small]#[constructor]#
| Construct a function wrapper from an existing value&period;
| link:#mrdocs-lua-Value-call[`call`] 
| Invoke the value as a function&period;
| link:#mrdocs-lua-Value-displayString[`displayString`] 
| Return a string representation&period;
| link:#mrdocs-lua-Value-isBoolean[`isBoolean`] 
| Return true if the value is a boolean&period;
| link:#mrdocs-lua-Value-isFunction[`isFunction`] 
| Return true if the value is a function&period;
| link:#mrdocs-lua-Value-isNil[`isNil`] 
| Return true if the value is nil&period;
| link:#mrdocs-lua-Value-isNumber[`isNumber`] 
| Return true if the value is numeric&period;
| link:#mrdocs-lua-Value-isString[`isString`] 
| Return true if the value is a string&period;
| link:#mrdocs-lua-Value-isTable[`isTable`] 
| Return true if the value is a table&period;
| link:#mrdocs-lua-Value-operator_call[`operator()`] 
| Invoke the value as a function&period;
| link:#mrdocs-lua-Value-type[`type`] 
| Return the Lua type of this value&period;
|===

== Protected Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Value-index_[`index&lowbar;`] 
| Stack index where the value is stored&period;
| link:#mrdocs-lua-Value-scope_[`scope&lowbar;`] 
| Scope that owns the stack slot for this value&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Access[mrdocs::lua::Access]`
| Internal tag granting access to lua internals&period;
|===

Construct a function wrapper from an existing value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Function(link:#mrdocs-lua-Value[Value] value);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to construct from
|===

A lazy container to push values to the Lua stack&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Param;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Param-2constructor-08c[`Param`]         [.small]#[constructor]# [.small]#[deleted]#
| Constructors
| link:#mrdocs-lua-Param-2destructor[`&#126;Param`] [.small]#[destructor]#
| Destroy the stored value without throwing&period;
| link:#mrdocs-lua-Param-operator_assign[`operator&equals;`]  [.small]#[deleted]#
| Deleted copy assignment to avoid double pops&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Param-arr_[`arr&lowbar;`] [.small]#[variant member]#
| Stored array when kind&lowbar; &equals;&equals; domArray&period;
| link:#mrdocs-lua-Param-b_[`b&lowbar;`] [.small]#[variant member]#
| Stored boolean value when kind&lowbar; &equals;&equals; boolean&period;
| link:#mrdocs-lua-Param-i_[`i&lowbar;`] [.small]#[variant member]#
| Stored integer value when kind&lowbar; &equals;&equals; integer&period;
| link:#mrdocs-lua-Param-index_[`index&lowbar;`] [.small]#[variant member]#
| Stack index when kind&lowbar; &equals;&equals; value&period;
| link:#mrdocs-lua-Param-obj_[`obj&lowbar;`] [.small]#[variant member]#
| Stored object when kind&lowbar; &equals;&equals; domObject&period;
| link:#mrdocs-lua-Param-s_[`s&lowbar;`] [.small]#[variant member]#
| Stored string view when kind&lowbar; &equals;&equals; string&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Access[mrdocs::lua::Access]`
| Internal tag granting access to lua internals&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

Deleted copy constructor to avoid double pops&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-035[Param](link:#mrdocs-lua-Param[Param] const& other) = delete;
----

[.small]#link:#mrdocs-lua-Param-2constructor-035[_» more&period;&period;&period;_]#

Construct from a DOM array&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-080[Param](link:#mrdocs-dom-Array[dom::Array] arr) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-080[_» more&period;&period;&period;_]#

Construct from a DOM object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-0f1[Param](link:#mrdocs-dom-Object[dom::Object] obj) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-0f1[_» more&period;&period;&period;_]#

Construct an integer parameter&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-017[Param](int64&lowbar;t value) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-017[_» more&period;&period;&period;_]#

Construct a nil parameter&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-0fb[Param](std::nullptr&lowbar;t value) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-0fb[_» more&period;&period;&period;_]#

Construct a string parameter (non&hyphen;owning)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-03d[Param](std::string&lowbar;view s) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-03d[_» more&period;&period;&period;_]#

Construct from a Lua Value already on the stack&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-093[Param](link:#mrdocs-lua-Value[Value] const& value) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-093[_» more&period;&period;&period;_]#

Construct from a generic DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-02[Param](link:#mrdocs-dom-Value[dom::Value] const& value) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-02[_» more&period;&period;&period;_]#

Construct a string parameter from C&hyphen;string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param-2constructor-098[Param](char const* s) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-098[_» more&period;&period;&period;_]#

Construct an integral parameter from an enum&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Enum&gt;
requires std&colon;&colon;is&lowbar;enum&lowbar;v&lt;Enum&gt;
link:#mrdocs-lua-Param-2constructor-04[Param](Enum v) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-04[_» more&period;&period;&period;_]#

Construct a boolean parameter from a bool&hyphen;like type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Boolean&gt;
requires std&colon;&colon;is&lowbar;same&lowbar;v&lt;Boolean, bool&gt;
link:#mrdocs-lua-Param-2constructor-019[Param](Boolean const& b) noexcept;
----

[.small]#link:#mrdocs-lua-Param-2constructor-019[_» more&period;&period;&period;_]#

Construct a string parameter from a convertible string type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class String&gt;
requires std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;
        String, std&colon;&colon;string&lowbar;view&gt;
link:#mrdocs-lua-Param-2constructor-0ff[Param](String const& s);
----

[.small]#link:#mrdocs-lua-Param-2constructor-0ff[_» more&period;&period;&period;_]#

Deleted copy constructor to avoid double pops&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(link:#mrdocs-lua-Param[Param] const& other) = delete;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Construct from a DOM array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(link:#mrdocs-dom-Array[dom::Array] arr) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The object to construct from
|===

Construct from a DOM object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(link:#mrdocs-dom-Object[dom::Object] obj) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| The object to construct from
|===

Construct an integer parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(int64&lowbar;t value) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to construct from
|===

Construct a nil parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(std::nullptr&lowbar;t value) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to construct from
|===

Construct a string parameter (non&hyphen;owning)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(std::string&lowbar;view s) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The object to construct from
|===

Construct from a Lua Value already on the stack&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(link:#mrdocs-lua-Value[Value] const& value) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to copy construct from
|===

Construct from a generic DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(link:#mrdocs-dom-Value[dom::Value] const& value) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to copy construct from
|===

Construct a string parameter from C&hyphen;string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(char const* s) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The value to construct from
|===

Construct an integral parameter from an enum&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Enum&gt;
requires std&colon;&colon;is&lowbar;enum&lowbar;v&lt;Enum&gt;
Param(Enum v) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The object to construct from
|===

Construct a boolean parameter from a bool&hyphen;like type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Boolean&gt;
requires std&colon;&colon;is&lowbar;same&lowbar;v&lt;Boolean, bool&gt;
Param(Boolean const& b) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *b*
| The object to copy construct from
|===

Construct a string parameter from a convertible string type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class String&gt;
requires std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;
        String, std&colon;&colon;string&lowbar;view&gt;
Param(String const& s);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The object to copy construct from
|===

Destroy the stored value without throwing&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Param();
----

Deleted copy assignment to avoid double pops&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Param[Param]&
operator&equals;(link:#mrdocs-lua-Param[Param] const& other) = delete;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Stored array when kind&lowbar; &equals;&equals; domArray&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[dom::Array] arr&lowbar;;
----

Stored boolean value when kind&lowbar; &equals;&equals; boolean&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool b&lowbar;;
----

Stored integer value when kind&lowbar; &equals;&equals; integer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
int i&lowbar;;
----

Stack index when kind&lowbar; &equals;&equals; value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
int index&lowbar;;
----

Stored object when kind&lowbar; &equals;&equals; domObject&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[dom::Object] obj&lowbar;;
----

Stored string view when kind&lowbar; &equals;&equals; string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view s&lowbar;;
----

Stack scope guard for Lua calls&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Scope;
----

== Description

Helper that balances the Lua stack for a Context scope&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Scope-2constructor[`Scope`]         [.small]#[constructor]#
| Create a scope that manages Lua stack references&period;
| link:#mrdocs-lua-Scope-2destructor[`&#126;Scope`] [.small]#[destructor]#
| Pop any pending stack references on destruction&period;
| link:#mrdocs-lua-Scope-getGlobal[`getGlobal`] 
| Return a value from the global table if it exists&period;
| link:#mrdocs-lua-Scope-getGlobalTable[`getGlobalTable`] 
| Return the global table&period;
| link:#mrdocs-lua-Scope-loadChunk-0c[`loadChunk`] 
| Load a Lua chunk
| link:#mrdocs-lua-Scope-loadChunkFromFile[`loadChunkFromFile`] 
| Run a Lua chunk&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Access[mrdocs::lua::Access]`
| Internal tag granting access to lua internals&period;
|===

Create a scope that manages Lua stack references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Scope(link:#mrdocs-lua-Context[Context] const& ctx) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ctx*
| Lua context to guard&period;
|===

Pop any pending stack references on destruction&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Scope();
----

Return a value from the global table if it exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
getGlobal(
    std::string&lowbar;view key,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

== Return Value

The value if it exists, or an error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to get&period;
| *loc*
| The source location of the call site&period;
|===

Return the global table&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Table[Table]
getGlobalTable();
----

== Return Value

the global table&period;

Load a Lua chunk

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

Load a Lua chunk


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Function&gt;]
link:#mrdocs-lua-Scope-loadChunk-012[loadChunk](
    std::string&lowbar;view luaChunk,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

[.small]#link:#mrdocs-lua-Scope-loadChunk-012[_» more&period;&period;&period;_]#

Load a Lua chunk


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Function&gt;]
link:#mrdocs-lua-Scope-loadChunk-017[loadChunk](
    std::string&lowbar;view luaChunk,
    link:#mrdocs-lua-zstring[zstring] chunkName,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

[.small]#link:#mrdocs-lua-Scope-loadChunk-017[_» more&period;&period;&period;_]#

== Return Value

The function if successful, or an error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *luaChunk*
| The Lua chunk to load&period;
| *loc*
| The source location of the call site&period;
| *chunkName*
| The name of the chunk (used in error messages)&period;
|===

Load a Lua chunk

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Function&gt;]
loadChunk(
    std::string&lowbar;view luaChunk,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

== Return Value

The function if successful, or an error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *luaChunk*
| The Lua chunk to load&period;
| *loc*
| The source location of the call site&period;
|===

Load a Lua chunk

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Function&gt;]
loadChunk(
    std::string&lowbar;view luaChunk,
    link:#mrdocs-lua-zstring[zstring] chunkName,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

== Return Value

The function if successful, or an error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *luaChunk*
| The Lua chunk to load&period;
| *chunkName*
| The name of the chunk (used in error messages)&period;
| *loc*
| The source location of the call site&period;
|===

Run a Lua chunk&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Function&gt;]
loadChunkFromFile(
    std::string&lowbar;view fileName,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

== Return Value

The function if successful, or an error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fileName*
| The name of the file to load&period;
| *loc*
| The source location of the call site&period;
|===

A Lua string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class String
    : public link:#mrdocs-lua-Value[Value]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Value[Value]`
| A Lua value&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-String-2constructor-04[`String`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-lua-Value-call[`call`] 
| Invoke the value as a function&period;
| link:#mrdocs-lua-Value-displayString[`displayString`] 
| Return a string representation&period;
| link:#mrdocs-lua-String-get[`get`] 
| Retrieve the underlying string view&period;
| link:#mrdocs-lua-Value-isBoolean[`isBoolean`] 
| Return true if the value is a boolean&period;
| link:#mrdocs-lua-Value-isFunction[`isFunction`] 
| Return true if the value is a function&period;
| link:#mrdocs-lua-Value-isNil[`isNil`] 
| Return true if the value is nil&period;
| link:#mrdocs-lua-Value-isNumber[`isNumber`] 
| Return true if the value is numeric&period;
| link:#mrdocs-lua-Value-isString[`isString`] 
| Return true if the value is a string&period;
| link:#mrdocs-lua-Value-isTable[`isTable`] 
| Return true if the value is a table&period;
| link:#mrdocs-lua-Value-operator_call[`operator()`] 
| Invoke the value as a function&period;
| link:#mrdocs-lua-String-operator_star[`operator&ast;`] 
| Dereference to the underlying string view&period;
| link:#mrdocs-lua-Value-type[`type`] 
| Return the Lua type of this value&period;
| link:#mrdocs-lua-String-2conversion[`operator std::string&lowbar;view`] 
| Implicit conversion to string view&period;
|===

== Protected Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Value-index_[`index&lowbar;`] 
| Stack index where the value is stored&period;
| link:#mrdocs-lua-Value-scope_[`scope&lowbar;`] 
| Scope that owns the stack slot for this value&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Access[mrdocs::lua::Access]`
| Internal tag granting access to lua internals&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

Wrap an existing Lua value as a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-String-2constructor-0b[String](link:#mrdocs-lua-Value[Value] value);
----

[.small]#link:#mrdocs-lua-String-2constructor-0b[_» more&period;&period;&period;_]#

Create a new Lua string from the given view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-lua-String-2constructor-0c[String](std::string&lowbar;view s);
----

[.small]#link:#mrdocs-lua-String-2constructor-0c[_» more&period;&period;&period;_]#

Wrap an existing Lua value as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
String(link:#mrdocs-lua-Value[Value] value);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to construct from
|===

Create a new Lua string from the given view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
String(std::string&lowbar;view s);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The object to construct from
|===

Retrieve the underlying string view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
get() const noexcept;
----

== Return Value

View of the Lua string contents&period;

Dereference to the underlying string view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
operator&ast;() const noexcept;
----

== Return Value

View of the Lua string contents&period;

Implicit conversion to string view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
operator std::string&lowbar;view() const noexcept;
----

== Return Value

The object converted to `string&lowbar;view`

A Lua table&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Table
    : public link:#mrdocs-lua-Value[Value]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Value[Value]`
| A Lua value&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Table-2constructor-0b7[`Table`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-lua-Value-call[`call`] 
| Invoke the value as a function&period;
| link:#mrdocs-lua-Value-displayString[`displayString`] 
| Return a string representation&period;
| link:#mrdocs-lua-Table-get[`get`] 
| Retrieve a table entry by key&semi; returns nil if missing&period;
| link:#mrdocs-lua-Value-isBoolean[`isBoolean`] 
| Return true if the value is a boolean&period;
| link:#mrdocs-lua-Value-isFunction[`isFunction`] 
| Return true if the value is a function&period;
| link:#mrdocs-lua-Value-isNil[`isNil`] 
| Return true if the value is nil&period;
| link:#mrdocs-lua-Value-isNumber[`isNumber`] 
| Return true if the value is numeric&period;
| link:#mrdocs-lua-Value-isString[`isString`] 
| Return true if the value is a string&period;
| link:#mrdocs-lua-Value-isTable[`isTable`] 
| Return true if the value is a table&period;
| link:#mrdocs-lua-Value-operator_call[`operator()`] 
| Invoke the value as a function&period;
| link:#mrdocs-lua-Table-set[`set`] 
| Create or replace the value with a key&period;
| link:#mrdocs-lua-Value-type[`type`] 
| Return the Lua type of this value&period;
|===

== Protected Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Value-index_[`index&lowbar;`] 
| Stack index where the value is stored&period;
| link:#mrdocs-lua-Value-scope_[`scope&lowbar;`] 
| Scope that owns the stack slot for this value&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Access[mrdocs::lua::Access]`
| Internal tag granting access to lua internals&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

Wrap an existing Lua value as a table&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Table-2constructor-0bd[Table](link:#mrdocs-lua-Value[Value] value);
----

[.small]#link:#mrdocs-lua-Table-2constructor-0bd[_» more&period;&period;&period;_]#

Create an empty table in the given scope&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-lua-Table-2constructor-07[Table](link:#mrdocs-lua-Scope[Scope]& scope);
----

[.small]#link:#mrdocs-lua-Table-2constructor-07[_» more&period;&period;&period;_]#

Construct a table by copying fields from a DOM object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Table-2constructor-03[Table](
    link:#mrdocs-lua-Scope[Scope]& scope,
    link:#mrdocs-dom-Object[dom::Object] const& obj);
----

[.small]#link:#mrdocs-lua-Table-2constructor-03[_» more&period;&period;&period;_]#

Wrap an existing Lua value as a table&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Table(link:#mrdocs-lua-Value[Value] value);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to construct from
|===

Create an empty table in the given scope&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Table(link:#mrdocs-lua-Scope[Scope]& scope);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *scope*
| The object to copy construct from
|===

Construct a table by copying fields from a DOM object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Table(
    link:#mrdocs-lua-Scope[Scope]& scope,
    link:#mrdocs-dom-Object[dom::Object] const& obj);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *scope*
| The object to copy construct from
| *obj*
| A container of key and value pairs&period;
|===

Retrieve a table entry by key&semi; returns nil if missing&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Value[Value]
get(std::string&lowbar;view key) const;
----

== Return Value

Value stored at key or nil if absent&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| Table key to look up&period;
|===

Create or replace the value with a key&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
set(
    std::string&lowbar;view key,
    link:#mrdocs-lua-Param[Param] value) const;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *key*
| The key to set&period;
| *value*
| The value to set&period;
|===

A Lua value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Value;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Value-2constructor-019[`Value`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-lua-Value-2destructor[`&#126;Value`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-lua-Value-call[`call`] 
| Invoke the value as a function&period;
| link:#mrdocs-lua-Value-displayString[`displayString`] 
| Return a string representation&period;
| link:#mrdocs-lua-Value-isBoolean[`isBoolean`] 
| Return true if the value is a boolean&period;
| link:#mrdocs-lua-Value-isFunction[`isFunction`] 
| Return true if the value is a function&period;
| link:#mrdocs-lua-Value-isNil[`isNil`] 
| Return true if the value is nil&period;
| link:#mrdocs-lua-Value-isNumber[`isNumber`] 
| Return true if the value is numeric&period;
| link:#mrdocs-lua-Value-isString[`isString`] 
| Return true if the value is a string&period;
| link:#mrdocs-lua-Value-isTable[`isTable`] 
| Return true if the value is a table&period;
| link:#mrdocs-lua-Value-operator_call[`operator()`] 
| Invoke the value as a function&period;
| link:#mrdocs-lua-Value-type[`type`] 
| Return the Lua type of this value&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Value-2constructor-016[`Value`]         [.small]#[constructor]#
| Create a value referring to a stack slot within a scope&period;
|===

== Protected Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-Value-index_[`index&lowbar;`] 
| Stack index where the value is stored&period;
| link:#mrdocs-lua-Value-scope_[`scope&lowbar;`] 
| Scope that owns the stack slot for this value&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-lua-Access[mrdocs::lua::Access]`
| Internal tag granting access to lua internals&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-lua-Function[`Function`]
| A Lua function&period;
| link:#mrdocs-lua-String[`String`]
| A Lua string&period;
| link:#mrdocs-lua-Table[`Table`]
| A Lua table&period;
|===

Constructor&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Value-2constructor-07[Value]() noexcept;
----

[.small]#link:#mrdocs-lua-Value-2constructor-07[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Value-2constructor-03[Value](link:#mrdocs-lua-Value[Value] const& other);
----

[.small]#link:#mrdocs-lua-Value-2constructor-03[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Value-2constructor-0e[Value](link:#mrdocs-lua-Value[Value]&& other) noexcept;
----

[.small]#link:#mrdocs-lua-Value-2constructor-0e[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The value to copy&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value() noexcept;
----

== Description

Default constructed values have no scope or assigned stack index and are equivalent to the value Nil&period;

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-lua-Value[Value] const& other);
----

== Description

The new value will be assigned a new stack index which has the same underlying value as `other`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The value to copy&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(link:#mrdocs-lua-Value[Value]&& other) noexcept;
----

== Description

The newly constructed object will acquire the same stack index, while the moved&hyphen;from object will become as if default&hyphen;constructed&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;Value();
----

== Description

The Lua value will eventually be removed from the stack&period;

Invoke the value as a function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
link:#mrdocs-Expected-0a[Expected&lt;Value&gt;]
call(Args&&&period;&period;&period; args);
----

== Description

If the invocation fails the return value will contain the corresponding error&period;

== Return Value

The return value of the function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Zero or more values to pass to the function&period;
|===

Return a string representation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
displayString() const;
----

== Description

This function is used for diagnostics&period;

== Return Value

a string representation&period;

Return true if the value is a boolean&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isBoolean() const noexcept;
----

== Return Value

true if the value is a boolean&period;

Return true if the value is a function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isFunction() const noexcept;
----

== Return Value

true if the value is a function&period;

Return true if the value is nil&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isNil() const noexcept;
----

== Return Value

true if the value is nil&period;

Return true if the value is numeric&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isNumber() const noexcept;
----

== Return Value

true if the value is numeric&period;

Return true if the value is a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isString() const noexcept;
----

== Return Value

true if the value is a string&period;

Return true if the value is a table&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isTable() const noexcept;
----

== Return Value

true if the value is a table&period;

Invoke the value as a function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
link:#mrdocs-lua-Value[Value]
operator()(Args&&&period;&period;&period; args);
----

== Return Value

Another instance of the object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Zero or more values to pass to the function&period;
|===

Return the Lua type of this value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Type[Type]
type() const noexcept;
----

== Return Value

the Lua type of this value&period;

Create a value referring to a stack slot within a scope&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Value(
    int position,
    link:#mrdocs-lua-Scope[Scope]& scope) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *position*
| The value to construct from
| *scope*
| Stack scope guard for Lua calls&period;
|===

Stack index where the value is stored&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
int index&lowbar;;
----

Scope that owns the stack slot for this value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-Scope[Scope]* scope&lowbar;;
----

A null&hyphen;terminated string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class zstring;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-lua-zstring-2constructor-0c[`zstring`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-lua-zstring-c_str[`c&lowbar;str`] 
| Return the underlying C&hyphen;string pointer&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

Construct from string&lowbar;view (stores an owned copy)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-zstring-2constructor-08[zstring](std::string&lowbar;view s);
----

[.small]#link:#mrdocs-lua-zstring-2constructor-08[_» more&period;&period;&period;_]#

Construct from std&colon;&colon;string without copying&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-zstring-2constructor-0e[zstring](std::string const& s);
----

[.small]#link:#mrdocs-lua-zstring-2constructor-0e[_» more&period;&period;&period;_]#

Construct from a C&hyphen;string pointer&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-lua-zstring-2constructor-09[zstring](char const* s) noexcept;
----

[.small]#link:#mrdocs-lua-zstring-2constructor-09[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| String view to copy&period;
|===

Construct from string&lowbar;view (stores an owned copy)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
zstring(std::string&lowbar;view s);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| String view to copy&period;
|===

Construct from std&colon;&colon;string without copying&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
zstring(std::string const& s);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| Source string&period;
|===

Construct from a C&hyphen;string pointer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
zstring(char const* s) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| Null&hyphen;terminated string&period;
|===

Return the underlying C&hyphen;string pointer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
char const*
c&lowbar;str() const noexcept;
----

== Return Value

the underlying C&hyphen;string pointer&period;

Types of values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Lua&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class Type : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `nil` 
| The value is nil
| `boolean` 
| The value is a boolean
| `number` 
| The value is a number
| `string` 
| The value is a string
| `table` 
| The value is a table
| `function` 
| The value is a function
|===

Reporting utilities (messages, statistics, sinks)&period;

== Description

The `report` namespace owns severity enums, message structs, and output sinks so tooling and libraries emit diagnostics in a uniform, testable format regardless of UI&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-Located[`Located`] 
| Parameter type that adds a source location to a value&period;
| link:#mrdocs-report-Results[`Results`] 
| Provides statistics on the number of reported messages&period;
|===

== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-Level[`Level`] 
| Severity levels attached to reported messags&period;
|===

== Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-debug[`debug`] 
| Emit a debug&hyphen;level diagnostic for troubleshooting&period;
| link:#mrdocs-report-error[`error`] 
| Emit an error that indicates failure but allows continuation&period;
| link:#mrdocs-report-fatal[`fatal`] 
| Emit a fatal error and mark the report as the highest severity&period;
| link:#mrdocs-report-getMinimumLevel[`getMinimumLevel`] 
| Get the minimum threshold level for reporting&period;
| link:#mrdocs-report-info[`info`] 
| Emit an informational message for users&period;
| link:#mrdocs-report-log[`log`] 
| Format a message to the console&period;
| link:#mrdocs-report-print-08[`print`] 
| Report a message to the console&period;
| link:#mrdocs-report-setMinimumLevel[`setMinimumLevel`] 
| Set the minimum threshold level for reporting&period;
| link:#mrdocs-report-setSourceLocationWarnings[`setSourceLocationWarnings`] 
| If true, source location information will be printed with warnings, errors, and fatal messages&period;
| link:#mrdocs-report-trace[`trace`] 
| Emit a trace&hyphen;level diagnostic (verbose, off by default)&period;
| link:#mrdocs-report-warn[`warn`] 
| Emit a warning that does not stop execution&period;
|===

== Variables

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-results[`results`] 
| Holds current statistics on reported messages&period;
|===

Parameter type that adds a source location to a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
struct Located;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-Located-2constructor[`Located`]         [.small]#[constructor]#
| Construct a Located wrapper&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-Located-value[`value`] 
| Wrapped value&period;
| link:#mrdocs-report-Located-where[`where`] 
| Source location of the value&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-report-debug[`debug`]
| Emit a debug&hyphen;level diagnostic for troubleshooting&period;
| link:#mrdocs-report-error[`error`]
| Emit an error that indicates failure but allows continuation&period;
| link:#mrdocs-report-fatal[`fatal`]
| Emit a fatal error and mark the report as the highest severity&period;
| link:#mrdocs-report-info[`info`]
| Emit an informational message for users&period;
| link:#mrdocs-report-trace[`trace`]
| Emit a trace&hyphen;level diagnostic (verbose, off by default)&period;
| link:#mrdocs-report-warn[`warn`]
| Emit a warning that does not stop execution&period;
|===

Construct a Located wrapper&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Arg&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, Arg&gt;
Located(
    Arg&& arg,
    std::source&lowbar;location const& loc = source&lowbar;location&colon;&colon;current());
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arg*
| Value to wrap&period;
| *loc*
| Source location to associate (defaults to current)&period;
|===

Wrapped value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
T value;
----

Source location of the value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::source&lowbar;location where;
----

Provides statistics on the number of reported messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Results;
----

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-report-Results-debugCount[`debugCount`] 
| Number of debug&hyphen;level messages&period;
| link:#mrdocs-report-Results-errorCount[`errorCount`] 
| Number of error&hyphen;level messages&period;
| link:#mrdocs-report-Results-fatalCount[`fatalCount`] 
| Number of fatal&hyphen;level messages&period;
| link:#mrdocs-report-Results-infoCount[`infoCount`] 
| Number of info&hyphen;level messages&period;
| link:#mrdocs-report-Results-traceCount[`traceCount`] 
| Number of trace&hyphen;level messages&period;
| link:#mrdocs-report-Results-warnCount[`warnCount`] 
| Number of warning&hyphen;level messages&period;
|===

Number of debug&hyphen;level messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t debugCount;
----

Number of error&hyphen;level messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t errorCount;
----

Number of fatal&hyphen;level messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t fatalCount;
----

Number of info&hyphen;level messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t infoCount;
----

Number of trace&hyphen;level messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t traceCount;
----

Number of warning&hyphen;level messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t warnCount;
----

Severity levels attached to reported messags&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class Level : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `trace` 
| Programming trace messages
| `debug` 
| Debug messages
| `info` 
| Informational messages
| `warn` 
| Warning messages
| `error` 
| Error messages
| `fatal` 
| Fatal error messages
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-report-getMinimumLevel[`getMinimumLevel`]
| Get the minimum threshold level for reporting&period;
| link:#mrdocs-report-log[`log`]
| Format a message to the console&period;
| link:#mrdocs-report-print-0f[`print`]
| Report a message to the console&period;
| link:#mrdocs-report-setMinimumLevel[`setMinimumLevel`]
| Set the minimum threshold level for reporting&period;
|===

Emit a debug&hyphen;level diagnostic for troubleshooting&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
debug(
    link:#mrdocs-report-Located[Located&lt;std::string&lowbar;view&gt;] format,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *format*
| fmt&hyphen;style format string&period;
| *args*
| Arguments substituted into the format string&period;
|===

Emit an error that indicates failure but allows continuation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
error(
    link:#mrdocs-report-Located[Located&lt;std::string&lowbar;view&gt;] format,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *format*
| fmt&hyphen;style format string&period;
| *args*
| Arguments substituted into the format string&period;
|===

Emit a fatal error and mark the report as the highest severity&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
fatal(
    link:#mrdocs-report-Located[Located&lt;std::string&lowbar;view&gt;] format,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *format*
| fmt&hyphen;style format string&period;
| *args*
| Arguments substituted into the format string&period;
|===

Get the minimum threshold level for reporting&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-report-Level[Level]
getMinimumLevel() noexcept;
----

== Return Value

Current minimum Level that will be emitted&period;

Emit an informational message for users&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
info(
    link:#mrdocs-report-Located[Located&lt;std::string&lowbar;view&gt;] format,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *format*
| fmt&hyphen;style format string&period;
| *args*
| Arguments substituted into the format string&period;
|===

Format a message to the console&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
log(
    link:#mrdocs-report-Level[Level] level,
    link:#mrdocs-report-Located[Located&lt;std::string&lowbar;view&gt;] fs,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *level*
| 0 to 4 The severity of the report&period; 0 is debug and 4 is fatal&period;
| *fs*
| The format string&period;
| *args*
| Optional additional arguments used to format a message to print&period; A trailing newline will be added to the message automatically&period;
|===

Report a message to the console&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

Report a message to the console&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-report-print-0e[print](std::string const& text);
----

[.small]#link:#mrdocs-report-print-0e[_» more&period;&period;&period;_]#

Report a message to the console&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-report-print-0f[print](
    link:#mrdocs-report-Level[Level] level,
    std::string const& text,
    std::source&lowbar;location const* loc = nullptr,
    link:#mrdocs-Error[Error] const* e = nullptr);
----

[.small]#link:#mrdocs-report-print-0f[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The message to print&period; A trailing newline will be added to the message automatically&period;
| *level*
| 0 to 4 The severity of the report&period; 0 is debug and 4 is fatal&period;
| *loc*
| The source location of the report&period; If this value is null, no location is printed&period;
|===

Report a message to the console&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
print(std::string const& text);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *text*
| The message to print&period; A trailing newline will be added to the message automatically&period;
|===

Report a message to the console&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
print(
    link:#mrdocs-report-Level[Level] level,
    std::string const& text,
    std::source&lowbar;location const* loc = nullptr,
    link:#mrdocs-Error[Error] const* e = nullptr);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *level*
| 0 to 4 The severity of the report&period; 0 is debug and 4 is fatal&period;
| *text*
| The message to print&period; A trailing newline will be added to the message automatically&period;
| *loc*
| The source location of the report&period; If this value is null, no location is printed&period;
| *e*
| Holds the description of an error, or success&period;
|===

Set the minimum threshold level for reporting&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
setMinimumLevel(link:#mrdocs-report-Level[Level] level) noexcept;
----

== Description

Messages below this level will not be printed&period; A value of 5 will suppress all messages&period; Note that messages will still be counted towards result totals even if they are not displayed&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *level*
| Severity levels attached to reported messags&period;
|===

If true, source location information will be printed with warnings, errors, and fatal messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
setSourceLocationWarnings(bool b) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *b*
| true to enable source location information, false to disable it&period; The default value is true&period;
|===

Emit a trace&hyphen;level diagnostic (verbose, off by default)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
trace(
    link:#mrdocs-report-Located[Located&lt;std::string&lowbar;view&gt;] format,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *format*
| fmt&hyphen;style format string&period;
| *args*
| Arguments substituted into the format string&period;
|===

Emit a warning that does not stop execution&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
warn(
    link:#mrdocs-report-Located[Located&lt;std::string&lowbar;view&gt;] format,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *format*
| fmt&hyphen;style format string&period;
| *args*
| Arguments substituted into the format string&period;
|===

Holds current statistics on reported messages&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Report&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
extern
link:#mrdocs-report-Results[Results] results;
----

unordered&lowbar;map keyed by std&colon;&colon;string with transparent hashing&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
using UnorderedStringMap = std::unordered&lowbar;map&lt;std::string, T, StringHash, std::equal&lowbar;to&gt;;
----

unordered&lowbar;multimap keyed by std&colon;&colon;string with transparent hashing&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
using UnorderedStringMultiMap = std::unordered&lowbar;multimap&lt;std::string, T, StringHash, std::equal&lowbar;to&gt;;
----

Alias for `add&lowbar;const&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
using add&lowbar;const&lowbar;from&lowbar;t = add&lowbar;const&lowbar;from&lt;From, To&gt;::type;
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *From*
| Source type providing const qualifier&period;
| *To*
| Destination type to adjust&period;
|===

Alias for `add&lowbar;cv&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
using add&lowbar;cv&lowbar;from&lowbar;t = add&lowbar;cv&lowbar;from&lt;From, To&gt;::type;
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *From*
| Source type providing cv qualifiers&period;
| *To*
| Destination type to adjust&period;
|===

Alias for `add&lowbar;cvref&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
using add&lowbar;cvref&lowbar;from&lowbar;t = add&lowbar;cvref&lowbar;from&lt;From, To&gt;::type;
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *From*
| Source type providing cv&hyphen;ref qualifiers&period;
| *To*
| Destination type to adjust&period;
|===

Alias for `add&lowbar;lvalue&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
using add&lowbar;lvalue&lowbar;reference&lowbar;from&lowbar;t = add&lowbar;lvalue&lowbar;reference&lowbar;from&lt;From, To&gt;::type;
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *From*
| Source type providing reference qualifier&period;
| *To*
| Destination type to adjust&period;
|===

Alias for `add&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
using add&lowbar;reference&lowbar;from&lowbar;t = add&lowbar;reference&lowbar;from&lt;From, To&gt;::type;
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *From*
| Source type providing reference qualifier&period;
| *To*
| Destination type to adjust&period;
|===

Alias for `add&lowbar;rvalue&lowbar;reference&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
using add&lowbar;rvalue&lowbar;reference&lowbar;from&lowbar;t = add&lowbar;rvalue&lowbar;reference&lowbar;from&lt;From, To&gt;::type;
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *From*
| Source type providing reference qualifier&period;
| *To*
| Destination type to adjust&period;
|===

Alias for `add&lowbar;volatile&lowbar;from&lt;From, To&gt;&colon;&colon;type`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
using add&lowbar;volatile&lowbar;from&lowbar;t = add&lowbar;volatile&lowbar;from&lt;From, To&gt;::type;
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *From*
| Source type providing volatile qualifier&period;
| *To*
| Destination type to adjust&period;
|===

Alias for `make&lowbar;dependent&lt;T, U&gt;&colon;&colon;type`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
using make&lowbar;dependent&lowbar;t = T;
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Type to make dependent&period;
| *U*
| Dependent parameter&period;
|===

Polymorphic visitor for files discovered during traversal&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct AnyFileVisitor;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-AnyFileVisitor-2destructor[`&#126;AnyFileVisitor`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor&period;
| link:#mrdocs-AnyFileVisitor-visitFile[`visitFile`]  [.small]#[virtual]#
| Visit a single file path&period;
|===

Virtual destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;AnyFileVisitor() = 0;
----

Visit a single file path&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
visitFile(std::string&lowbar;view fileName) = 0;
----

== Return Value

Success or error from visitor&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fileName*
| Path to the file being visited&period;
|===

C&plus;&plus; array type (bounded or unbounded)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;ArrayType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ArrayType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Array&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Array&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-ArrayType-isArray[`isArray`] 
| link:#mrdocs-ArrayType-isAuto[`isAuto`] 
| link:#mrdocs-ArrayType-isDecltype[`isDecltype`] 
| link:#mrdocs-ArrayType-isFunction[`isFunction`] 
| link:#mrdocs-ArrayType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-ArrayType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-ArrayType-isNamed[`isNamed`] 
| link:#mrdocs-ArrayType-isPointer[`isPointer`] 
| link:#mrdocs-ArrayType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ArrayType-Bounds[`Bounds`] 
| Optional bound&semi; empty means unknown or dependent&period;
| link:#mrdocs-ArrayType-ElementType[`ElementType`] 
| Element type held by the array&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-ArrayType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

Optional bound&semi; empty means unknown or dependent&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;ArrayType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ConstantExprInfo[ConstantExprInfo&lt;uint64&lowbar;t&gt;] Bounds;
----

Element type held by the array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;ArrayType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] ElementType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

A non&hyphen;owning, read&hyphen;only view over a contiguous array of T&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
class ArrayView;
----

== Description

Similar to std&colon;&colon;string&lowbar;view but for arbitrary element type T&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ArrayView-06-const_iterator[`const&lowbar;iterator`] 
| Iterator over elements&period;
| link:#mrdocs-ArrayView-06-const_pointer[`const&lowbar;pointer`] 
| Pointer to constant element&period;
| link:#mrdocs-ArrayView-06-const_reference[`const&lowbar;reference`] 
| Reference to constant element&period;
| link:#mrdocs-ArrayView-06-const_reverse_iterator[`const&lowbar;reverse&lowbar;iterator`] 
| Const reverse iterator over the view&period;
| link:#mrdocs-ArrayView-06-difference_type[`difference&lowbar;type`] 
| Signed iterator difference type&period;
| link:#mrdocs-ArrayView-06-iterator[`iterator`] 
| Iterator over elements&period;
| link:#mrdocs-ArrayView-06-pointer[`pointer`] 
| Pointer to constant element&period;
| link:#mrdocs-ArrayView-06-reference[`reference`] 
| Reference to constant element&period;
| link:#mrdocs-ArrayView-06-reverse_iterator[`reverse&lowbar;iterator`] 
| Reverse iterator over the view&period;
| link:#mrdocs-ArrayView-06-size_type[`size&lowbar;type`] 
| Unsigned size type&period;
| link:#mrdocs-ArrayView-06-value_type[`value&lowbar;type`] 
| Element type referenced by the view&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ArrayView-06-2constructor-0e85[`ArrayView`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-ArrayView-06-at[`at`] 
| Access the element at the specified index with bounds checking&period;
| link:#mrdocs-ArrayView-06-back[`back`] 
| Return a reference to the last element&period;
| link:#mrdocs-ArrayView-06-begin[`begin`] 
| Return an iterator to the first element&period;
| link:#mrdocs-ArrayView-06-cbegin[`cbegin`] 
| Return a const iterator to the first element&period;
| link:#mrdocs-ArrayView-06-cend[`cend`] 
| Return a const iterator one past the last element&period;
| link:#mrdocs-ArrayView-06-data[`data`] 
| Return a pointer to the underlying data&period;
| link:#mrdocs-ArrayView-06-drop_back[`drop&lowbar;back`] 
| Return a view with the last `n` elements removed&period;
| link:#mrdocs-ArrayView-06-drop_front[`drop&lowbar;front`] 
| Return a view with the first `n` elements removed&period;
| link:#mrdocs-ArrayView-06-empty[`empty`] 
| Return true if the view contains no elements&period;
| link:#mrdocs-ArrayView-06-end[`end`] 
| Return an iterator one past the last element&period;
| link:#mrdocs-ArrayView-06-front[`front`] 
| Return a reference to the first element&period;
| link:#mrdocs-ArrayView-06-length[`length`] 
| Return the number of elements in the view&period;
| link:#mrdocs-ArrayView-06-operator_subs[`operator&lsqb;&rsqb;`] 
| Access the element at the specified index without bounds checking&period;
| link:#mrdocs-ArrayView-06-rbegin[`rbegin`] 
| Return a reverse iterator to the last element&period;
| link:#mrdocs-ArrayView-06-remove_prefix[`remove&lowbar;prefix`] 
| Remove `n` elements from the front of the view&period;
| link:#mrdocs-ArrayView-06-remove_suffix[`remove&lowbar;suffix`] 
| Remove `n` elements from the back of the view&period;
| link:#mrdocs-ArrayView-06-rend[`rend`] 
| Return a reverse iterator one before the first element&period;
| link:#mrdocs-ArrayView-06-size[`size`] 
| Return the number of elements in the view&period;
| link:#mrdocs-ArrayView-06-slice[`slice`] 
| Return a subview starting at `pos` with up to `count` elements&period;
| link:#mrdocs-ArrayView-06-take_back[`take&lowbar;back`] 
| Return a view containing the last `n` elements&period;
| link:#mrdocs-ArrayView-06-take_front[`take&lowbar;front`] 
| Return a view containing the first `n` elements&period;
|===

== Static Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ArrayView-06-npos[`npos`] 
| Sentinel used by slicing helpers to indicate “until the end”&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-operator_3way-0a[mrdocs::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mrdocs-operator_eq-07[mrdocs::operator&equals;&equals;]`
| Equality operator
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-make_array_view-09[`make&lowbar;array&lowbar;view`]
| Create an ArrayView from a C&hyphen;style array&period;
| link:#mrdocs-make_array_view-0b[`make&lowbar;array&lowbar;view`]
| Create an ArrayView from a pointer and count&period;
|===

Iterator over elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;iterator = T const*;
----

Pointer to constant element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;pointer = T const*;
----

Reference to constant element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;reference = T const&;
----

Const reverse iterator over the view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;reverse&lowbar;iterator = std::reverse&lowbar;iterator&lt;const&lowbar;iterator&gt;;
----

Signed iterator difference type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using difference&lowbar;type = std::ptrdiff&lowbar;t;
----

Iterator over elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using iterator = T const*;
----

Pointer to constant element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using pointer = T const*;
----

Reference to constant element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reference = T const&;
----

Reverse iterator over the view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reverse&lowbar;iterator = std::reverse&lowbar;iterator&lt;const&lowbar;iterator&gt;;
----

Unsigned size type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = std::size&lowbar;t;
----

Element type referenced by the view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = T;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

Construct an empty view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-2constructor-0e8c[ArrayView]() noexcept = default;
----

[.small]#link:#mrdocs-ArrayView-06-2constructor-0e8c[_» more&period;&period;&period;_]#

Construct a view from a C&hyphen;style array&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] N&gt;
constexpr
link:#mrdocs-ArrayView-06-2constructor-03[ArrayView](T const(& arr)[N]) noexcept;
----

[.small]#link:#mrdocs-ArrayView-06-2constructor-03[_» more&period;&period;&period;_]#

Construct a view from a pointer and element count&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-2constructor-0d[ArrayView](
    T const* data,
    link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] count) noexcept;
----

[.small]#link:#mrdocs-ArrayView-06-2constructor-0d[_» more&period;&period;&period;_]#

Construct a view from a contiguous iterator range of known size&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class It&gt;
requires (std&colon;&colon;contiguous&lowbar;iterator&lt;It&gt; &amp;&amp;
             std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;remove&lowbar;cv&lowbar;t&lt;std&colon;&colon;remove&lowbar;reference&lowbar;t&lt;std&colon;&colon;iter&lowbar;value&lowbar;t&lt;It&gt;&gt;&gt;, T&gt;)
constexpr
link:#mrdocs-ArrayView-06-2constructor-0f[ArrayView](
    It first,
    link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] count) noexcept;
----

[.small]#link:#mrdocs-ArrayView-06-2constructor-0f[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The array to view&period;
| *data*
| Pointer to the first element&period;
| *count*
| Number of elements in the range&period;
| *first*
| Iterator to the first element&period;
|===

Construct an empty view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
ArrayView() noexcept = default;
----

Construct a view from a C&hyphen;style array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] N&gt;
constexpr
ArrayView(T const(& arr)[N]) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| The array to view&period;
|===

Construct a view from a pointer and element count&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
ArrayView(
    T const* data,
    link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] count) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *data*
| Pointer to the first element&period;
| *count*
| Number of elements in the range&period;
|===

Construct a view from a contiguous iterator range of known size&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class It&gt;
requires (std&colon;&colon;contiguous&lowbar;iterator&lt;It&gt; &amp;&amp;
             std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;remove&lowbar;cv&lowbar;t&lt;std&colon;&colon;remove&lowbar;reference&lowbar;t&lt;std&colon;&colon;iter&lowbar;value&lowbar;t&lt;It&gt;&gt;&gt;, T&gt;)
constexpr
ArrayView(
    It first,
    link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] count) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *first*
| Iterator to the first element&period;
| *count*
| Number of elements starting at `first`&period;
|===

Access the element at the specified index with bounds checking&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_reference[const&lowbar;reference]
at(link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] i) const;
----

== Return Value

Reference to the element&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| Zero&hyphen;based index&period;
|===

Return a reference to the last element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_reference[const&lowbar;reference]
back() const;
----

== Return Value

a reference to the last element&period;

Return an iterator to the first element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_iterator[const&lowbar;iterator]
begin() const noexcept;
----

== Return Value

Iterator to the start of the view&period;

Return a const iterator to the first element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_iterator[const&lowbar;iterator]
cbegin() const noexcept;
----

== Return Value

Const iterator to the start of the view&period;

Return a const iterator one past the last element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_iterator[const&lowbar;iterator]
cend() const noexcept;
----

== Return Value

Const iterator to the end sentinel&period;

Return a pointer to the underlying data&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_pointer[const&lowbar;pointer]
data() const noexcept;
----

== Return Value

Pointer to the first element, or nullptr when empty&period;

Return a view with the last `n` elements removed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06[ArrayView]
drop&lowbar;back(link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] n) const noexcept;
----

== Return Value

Subview excluding the dropped elements&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *n*
| Number of elements to drop from the back&period;
|===

Return a view with the first `n` elements removed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06[ArrayView]
drop&lowbar;front(link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] n) const noexcept;
----

== Return Value

Subview starting after the dropped elements&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *n*
| Number of elements to drop from the front&period;
|===

Return true if the view contains no elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
empty() const noexcept;
----

== Return Value

`true` when size is zero, otherwise `false`&period;

Return an iterator one past the last element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_iterator[const&lowbar;iterator]
end() const noexcept;
----

== Return Value

Iterator to the end sentinel&period;

Return a reference to the first element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_reference[const&lowbar;reference]
front() const;
----

== Return Value

a reference to the first element&period;

Return the number of elements in the view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-size_type[size&lowbar;type]
length() const noexcept;
----

== Return Value

Element count&period;

Access the element at the specified index without bounds checking&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_reference[const&lowbar;reference]
operator&lsqb;&rsqb;(link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] i) const noexcept;
----

== Return Value

Reference to the element&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *i*
| Zero&hyphen;based index&period;
|===

Return a reverse iterator to the last element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_reverse_iterator[const&lowbar;reverse&lowbar;iterator]
rbegin() const noexcept;
----

== Return Value

Reverse iterator to the last element&period;

Remove `n` elements from the front of the view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
remove&lowbar;prefix(link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] n) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *n*
| Number of elements to drop&period;
|===

Remove `n` elements from the back of the view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
remove&lowbar;suffix(link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] n) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *n*
| Number of elements to drop&period;
|===

Return a reverse iterator one before the first element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-const_reverse_iterator[const&lowbar;reverse&lowbar;iterator]
rend() const noexcept;
----

== Return Value

Reverse iterator denoting the rend sentinel&period;

Return the number of elements in the view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06-size_type[size&lowbar;type]
size() const noexcept;
----

== Return Value

Element count&period;

Return a subview starting at `pos` with up to `count` elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06[ArrayView]
slice(
    link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] pos,
    link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] count = npos) const noexcept;
----

== Return Value

Subview representing the requested slice&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pos*
| Starting index within the current view&period;
| *count*
| Maximum number of elements to include&semi; use npos for the remainder&period;
|===

Return a view containing the last `n` elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06[ArrayView]
take&lowbar;back(link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] n) const noexcept;
----

== Return Value

Subview of the last `n` elements (clamped to size)&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *n*
| Desired suffix length&period;
|===

Return a view containing the first `n` elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ArrayView-06[ArrayView]
take&lowbar;front(link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] n) const noexcept;
----

== Return Value

Subview of the first `n` elements (clamped to size)&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *n*
| Desired prefix length&period;
|===

Sentinel used by slicing helpers to indicate “until the end”&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-ArrayView-06-size_type[size&lowbar;type] npos = static&lowbar;cast&lt;size&lowbar;type&gt;(&hyphen;1);
----

Represents `auto` or `decltype(auto)` placeholder type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;AutoType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct AutoType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Auto&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Auto&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-AutoType-isArray[`isArray`] 
| link:#mrdocs-AutoType-isAuto[`isAuto`] 
| link:#mrdocs-AutoType-isDecltype[`isDecltype`] 
| link:#mrdocs-AutoType-isFunction[`isFunction`] 
| link:#mrdocs-AutoType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-AutoType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-AutoType-isNamed[`isNamed`] 
| link:#mrdocs-AutoType-isPointer[`isPointer`] 
| link:#mrdocs-AutoType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-AutoType-Constraint[`Constraint`] 
| Constraint on the auto type, if any&period;
| link:#mrdocs-AutoType-Keyword[`Keyword`] 
| Which placeholder keyword appears (`auto` or `decltype(auto)`)&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-AutoType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

Constraint on the auto type, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;AutoType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Name&gt;&gt;] Constraint = std&colon;&colon;nullopt;
----

Which placeholder keyword appears (`auto` or `decltype(auto)`)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;AutoType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-AutoKind[AutoKind] Keyword = AutoKind&colon;&colon;Auto;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

Base class for accessing an empty Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class E&gt;
class BadExpectedAccess
    : public link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]
----

== Description

Exception thrown when reading the error of an Expected with a value&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]`
| Exception thrown when reading the value of an empty Expected&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-BadExpectedAccess-05-2constructor[`BadExpectedAccess`]         [.small]#[constructor]#
| Construct with the unexpected error value&period;
| link:#mrdocs-BadExpectedAccess-0f-operator_assign-0e[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-BadExpectedAccess-05-error-03[`error`] 
| `error` overloads
| link:#mrdocs-BadExpectedAccess-0f-what[`what`]  [.small]#[virtual]#
| Return a diagnostic string&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-BadExpectedAccess-0f-operator_assign-08[`operator&equals;`] 
| Assignment operators
|===

Construct with the unexpected error value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
BadExpectedAccess(E e);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The object to construct from
|===

`error` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Access the contained error by lvalue reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
E&
link:#mrdocs-BadExpectedAccess-05-error-05[error]() &amp; noexcept;
----

[.small]#link:#mrdocs-BadExpectedAccess-05-error-05[_» more&period;&period;&period;_]#

Access the contained error by const lvalue reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
E const&
link:#mrdocs-BadExpectedAccess-05-error-08[error]() const &amp; noexcept;
----

[.small]#link:#mrdocs-BadExpectedAccess-05-error-08[_» more&period;&period;&period;_]#

Access the contained error by rvalue reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
E&&
link:#mrdocs-BadExpectedAccess-05-error-0f[error]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-BadExpectedAccess-05-error-0f[_» more&period;&period;&period;_]#

Access the contained error by const rvalue reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
E const&&
link:#mrdocs-BadExpectedAccess-05-error-0b[error]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-BadExpectedAccess-05-error-0b[_» more&period;&period;&period;_]#

== Return Value

* Reference to the stored unexpected value&period;
* Const reference to the stored unexpected value&period;
* Rvalue reference to the stored unexpected value&period;
* Const rvalue reference to the stored unexpected value&period;

Access the contained error by lvalue reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
E&
error() &amp; noexcept;
----

== Return Value

Reference to the stored unexpected value&period;

Access the contained error by const lvalue reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
E const&
error() const &amp; noexcept;
----

== Return Value

Const reference to the stored unexpected value&period;

Access the contained error by rvalue reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
E&&
error() &amp;&amp; noexcept;
----

== Return Value

Rvalue reference to the stored unexpected value&period;

Access the contained error by const rvalue reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
E const&&
error() const &amp;&amp; noexcept;
----

== Return Value

Const rvalue reference to the stored unexpected value&period;

Exception thrown when reading the value of an empty Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&gt;
class link:#mrdocs-BadExpectedAccess-05[BadExpectedAccess]&lt;void&gt;
    : public std::exception
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `std::exception`
| Base class for all library exceptions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-BadExpectedAccess-0f-operator_assign-0e[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-BadExpectedAccess-0f-what[`what`]  [.small]#[virtual]#
| Return a diagnostic string&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-BadExpectedAccess-0f-2constructor-0b[`BadExpectedAccess`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-BadExpectedAccess-0f-2destructor[`&#126;BadExpectedAccess`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor&period;
| link:#mrdocs-BadExpectedAccess-0f-operator_assign-08[`operator&equals;`] 
| Assignment operators
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-BadExpectedAccess-05[`BadExpectedAccess`]
| Base class for accessing an empty Expected&period;
|===

Assignment operators

== Synopses

Declared in `&lt;bits&sol;exception&period;h&gt;`

Assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
exception&
link:#mrdocs-BadExpectedAccess-0f-operator_assign-02[operator&equals;](exception const& value) = default;
----

[.small]#link:#mrdocs-BadExpectedAccess-0f-operator_assign-02[_» more&period;&period;&period;_]#

Assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
exception&
link:#mrdocs-BadExpectedAccess-0f-operator_assign-00[operator&equals;](exception&& value) = default;
----

[.small]#link:#mrdocs-BadExpectedAccess-0f-operator_assign-00[_» more&period;&period;&period;_]#

Assignment operator

== Synopsis

Declared in `&lt;bits&sol;exception&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
exception&
operator&equals;(exception const& value) = default;
----

== Return Value

Base class for all library exceptions&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to copy assign from
|===

Assignment operator

== Synopsis

Declared in `&lt;bits&sol;exception&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
exception&
operator&equals;(exception&& value) = default;
----

== Return Value

Base class for all library exceptions&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to move assign from
|===

Return a diagnostic string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
virtual
char const*
what() const noexcept override;
----

== Return Value

a diagnostic string&period;

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Default constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-BadExpectedAccess-0f-2constructor-01[BadExpectedAccess]() noexcept = default;
----

[.small]#link:#mrdocs-BadExpectedAccess-0f-2constructor-01[_» more&period;&period;&period;_]#

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-BadExpectedAccess-0f-2constructor-056[BadExpectedAccess](link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;] const& other) = default;
----

[.small]#link:#mrdocs-BadExpectedAccess-0f-2constructor-056[_» more&period;&period;&period;_]#

Move constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-BadExpectedAccess-0f-2constructor-059[BadExpectedAccess](link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]&& other) = default;
----

[.small]#link:#mrdocs-BadExpectedAccess-0f-2constructor-059[_» more&period;&period;&period;_]#

Default constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
BadExpectedAccess() noexcept = default;
----

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
BadExpectedAccess(link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
BadExpectedAccess(link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]&& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Virtual destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;BadExpectedAccess() override = default;
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Copy assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]&
link:#mrdocs-BadExpectedAccess-0f-operator_assign-01[operator&equals;](link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;] const& other) = default;
----

[.small]#link:#mrdocs-BadExpectedAccess-0f-operator_assign-01[_» more&period;&period;&period;_]#

Move assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]&
link:#mrdocs-BadExpectedAccess-0f-operator_assign-07[operator&equals;](link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]&& other) = default;
----

[.small]#link:#mrdocs-BadExpectedAccess-0f-operator_assign-07[_» more&period;&period;&period;_]#

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]&
operator&equals;(link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]&
operator&equals;(link:#mrdocs-BadExpectedAccess-0f[BadExpectedAccess&lt;void&gt;]&& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Metadata for a direct base&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct BaseInfo;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-BaseInfo-2constructor-05[`BaseInfo`]         [.small]#[constructor]# [.small]#[deleted]#
| Constructors
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-BaseInfo-Access[`Access`] 
| The access specifier for the base&period;
| link:#mrdocs-BaseInfo-IsVirtual[`IsVirtual`] 
| Whether the base is virtual&period;
| link:#mrdocs-BaseInfo-Type[`Type`] 
| The base type&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

Bases must be explicitly described&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-BaseInfo-2constructor-08[BaseInfo]() = delete;
----

[.small]#link:#mrdocs-BaseInfo-2constructor-08[_» more&period;&period;&period;_]#

Create a base description&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-BaseInfo-2constructor-0e[BaseInfo](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;]&& type,
    link:#mrdocs-AccessKind[AccessKind] const access,
    bool const is&lowbar;virtual);
----

[.small]#link:#mrdocs-BaseInfo-2constructor-0e[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *type*
| The base type&period;
| *access*
| Declared access specifier&period;
| *is&lowbar;virtual*
| Whether the base is virtual&period;
|===

Bases must be explicitly described&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
BaseInfo() = delete;
----

Create a base description&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
BaseInfo(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;]&& type,
    link:#mrdocs-AccessKind[AccessKind] const access,
    bool const is&lowbar;virtual);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *type*
| The base type&period;
| *access*
| Declared access specifier&period;
| *is&lowbar;virtual*
| Whether the base is virtual&period;
|===

The access specifier for the base&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-AccessKind[AccessKind] Access = AccessKind&colon;&colon;Public;
----

Whether the base is virtual&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsVirtual = false;
----

The base type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] Type;
----

== Description

This is typically a `NamedType` that refers to a `RecordSymbol`, but it could also be a more complex type such as a `decltype`&period;

Info for concepts&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Concept&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ConceptSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Concept&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Concept&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ConceptSymbol-2constructor[`ConceptSymbol`]         [.small]#[constructor]#
| Construct a concept symbol with its ID&period;
| link:#mrdocs-ConceptSymbol-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare concept symbols by base info, template, and constraint&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-ConceptSymbol-isConcept[`isConcept`] 
| link:#mrdocs-ConceptSymbol-isEnum[`isEnum`] 
| link:#mrdocs-ConceptSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-ConceptSymbol-isFunction[`isFunction`] 
| link:#mrdocs-ConceptSymbol-isGuide[`isGuide`] 
| link:#mrdocs-ConceptSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-ConceptSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-ConceptSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-ConceptSymbol-isRecord[`isRecord`] 
| link:#mrdocs-ConceptSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-ConceptSymbol-isUsing[`isUsing`] 
| link:#mrdocs-ConceptSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ConceptSymbol-Constraint[`Constraint`] 
| The concepts constraint&hyphen;expression
| link:#mrdocs-ConceptSymbol-Template[`Template`] 
| The concepts template parameters
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-ConceptSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Construct a concept symbol with its ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Concept&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
ConceptSymbol(link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to copy construct from
|===

Compare concept symbols by base info, template, and constraint&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Concept&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-ConceptSymbol[ConceptSymbol] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

The concepts constraint&hyphen;expression

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Concept&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo] Constraint;
----

The concepts template parameters

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Concept&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;TemplateInfo&gt;] Template;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

Configuration used to generate the Corpus and Docs

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Config;
----

== Description

This contains all the public settings applied from the command line and the YML file (if any)&period;

This class stores the original and public config options as they are passed to MrDocs, in their original data types, such as strings and bools&period;

This class is an abstract interface whose private concrete implementation typically includes these parsed configuration values in a more convenient form for use by MrDocs&period;

Meanwhile, this class is provided publicly to plugins&period;

The configuration is always connected to the directory of the mrdocs&period;yml file from which absolute paths are calculated from relative paths&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Config-Settings[`Settings`] 
| Settings values used to generate the Corpus and Docs
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Config-2destructor[`&#126;Config`] [.small]#[destructor]# [.small]#[virtual]#
| Destructor&period;
| link:#mrdocs-Config-object[`object`]  [.small]#[virtual]#
| Return a DOM object representing the configuration keys&period;
| link:#mrdocs-Config-operator_ptr[`operator&hyphen;&gt;`] 
| Return the settings used to generate the Corpus and Docs&period;
| link:#mrdocs-Config-settings[`settings`]  [.small]#[virtual]#
| Return the settings used to generate the Corpus and Docs&period;
| link:#mrdocs-Config-threadPool[`threadPool`]  [.small]#[virtual]#
| Return a pool of threads for executing work&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Config-2constructor[`Config`]         [.small]#[constructor]#
| Construct an empty configuration interface&period; Implementations populate settings in derived classes&period;
|===

Settings values used to generate the Corpus and Docs

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Settings
    : PublicSettings
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `PublicSettings`
| 
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Config-Settings-OptionProperties[`OptionProperties`] 
| Option validation traits
|===

== Enums

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Config-Settings-BaseMemberInheritance[`BaseMemberInheritance`] 
| Enum for &quot;base&hyphen;member&hyphen;inheritance&quot; options
| link:#mrdocs-Config-Settings-Generator[`Generator`] 
| Enum for &quot;generator&quot; options
| link:#mrdocs-Config-Settings-LogLevel[`LogLevel`] 
| Enum for &quot;log&hyphen;level&quot; options
| link:#mrdocs-Config-Settings-OptionType[`OptionType`] 
| Option Type
| link:#mrdocs-Config-Settings-SortSymbolBy[`SortSymbolBy`] 
| Enum for &quot;sort&hyphen;symbol&hyphen;by&quot; options
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Config-Settings-configDir[`configDir`] 
| Full path to the config file directory
| link:#mrdocs-Config-Settings-normalize-08[`normalize`] 
| Normalize the configuration values with a visitor
| link:#mrdocs-Config-Settings-operator_ptr[`operator&hyphen;&gt;`] 
| Provide pointer&hyphen;like access to settings fields&period;
| link:#mrdocs-Config-Settings-outputDir[`outputDir`] 
| Full path to the output directory
| link:#mrdocs-Config-Settings-visit-08[`visit`] 
| Visit all options
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Config-Settings-fromString-04[`fromString`] 
| 
| link:#mrdocs-Config-Settings-load-05[`load`] 
| `load` overloads
| link:#mrdocs-Config-Settings-load_file[`load&lowbar;file`] 
| Loads the public configuration settings from the specified file&period;
| link:#mrdocs-Config-Settings-toString-0b[`toString`] 
| 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Config-Settings-addons[`addons`] 
| Path to the Addons directory
| link:#mrdocs-Config-Settings-addonsSupplemental[`addonsSupplemental`] 
| Additional addons layered on top of the base addons
| link:#mrdocs-Config-Settings-autoBrief[`autoBrief`] 
| command is required&period;
| link:#mrdocs-Config-Settings-autoFunctionMetadata[`autoFunctionMetadata`] 
| Automatically provide missing documentation for special functions and trivial metadata
| link:#mrdocs-Config-Settings-autoFunctionObjects[`autoFunctionObjects`] 
| Automatically detect function objects
| link:#mrdocs-Config-Settings-autoRelates[`autoRelates`] 
| Automatically find non&hyphen;member functions
| link:#mrdocs-Config-Settings-baseUrl[`baseUrl`] 
| Base URL for links to source code
| link:#mrdocs-Config-Settings-cmake[`cmake`] 
| CMake arguments when generating the compilation database from CMakeLists&period;txt
| link:#mrdocs-Config-Settings-cmdLineInputs[`cmdLineInputs`] 
| Configuration or compilation database files
| link:#mrdocs-Config-Settings-compilationDatabase[`compilationDatabase`] 
| Path to the compilation database
| link:#mrdocs-Config-Settings-concurrency[`concurrency`] 
| Number of threads to use
| link:#mrdocs-Config-Settings-config[`config`] 
| Mr&period;Docs configuration file
| link:#mrdocs-Config-Settings-configYaml[`configYaml`] 
| A string holding the complete configuration YAML&period;
| link:#mrdocs-Config-Settings-copycss[`copycss`] 
| Copy local stylesheets when linking
| link:#mrdocs-Config-Settings-cwdDir[`cwdDir`] 
| Full path to the current working directory
| link:#mrdocs-Config-Settings-defines[`defines`] 
| Additional defines passed to the compiler
| link:#mrdocs-Config-Settings-embedded[`embedded`] 
| Output an embeddable document
| link:#mrdocs-Config-Settings-exclude[`exclude`] 
| Input directories to exclude
| link:#mrdocs-Config-Settings-excludePatterns[`excludePatterns`] 
| File patterns to exclude
| link:#mrdocs-Config-Settings-excludeSymbols[`excludeSymbols`] 
| Symbol patterns to exclude
| link:#mrdocs-Config-Settings-extractAll[`extractAll`] 
| Extract all symbols
| link:#mrdocs-Config-Settings-extractAnonymousNamespaces[`extractAnonymousNamespaces`] 
| Extraction policy for anonymous namespaces
| link:#mrdocs-Config-Settings-extractEmptyNamespaces[`extractEmptyNamespaces`] 
| Extraction policy for empty namespaces
| link:#mrdocs-Config-Settings-extractFriends[`extractFriends`] 
| Extraction policy for friend functions and classes
| link:#mrdocs-Config-Settings-extractImplicitSpecializations[`extractImplicitSpecializations`] 
| Implicit template specializations used as base classes are extracted as dependencies
| link:#mrdocs-Config-Settings-extractLocalClasses[`extractLocalClasses`] 
| Extraction policy for records defined locally in source files
| link:#mrdocs-Config-Settings-extractPrivate[`extractPrivate`] 
| Extraction policy for private class members
| link:#mrdocs-Config-Settings-extractPrivateBases[`extractPrivateBases`] 
| Extraction policy for private base classes
| link:#mrdocs-Config-Settings-extractPrivateVirtual[`extractPrivateVirtual`] 
| Extraction policy for private virtual methods of a class
| link:#mrdocs-Config-Settings-extractStatic[`extractStatic`] 
| Extraction policy for static members of a file
| link:#mrdocs-Config-Settings-filePatterns[`filePatterns`] 
| File patterns to include
| link:#mrdocs-Config-Settings-generator[`generator`] 
| Generator used to create the documentation
| link:#mrdocs-Config-Settings-globalNamespaceIndex[`globalNamespaceIndex`] 
| Use the global namespace page as an index for all symbols
| link:#mrdocs-Config-Settings-ignoreFailures[`ignoreFailures`] 
| Whether AST visitation failures should not stop the program
| link:#mrdocs-Config-Settings-ignoreMapErrors[`ignoreMapErrors`] 
| Continue if files are not mapped correctly
| link:#mrdocs-Config-Settings-implementationDefined[`implementationDefined`] 
| Symbols rendered as &quot;implementation&hyphen;defined&quot;
| link:#mrdocs-Config-Settings-includeSymbols[`includeSymbols`] 
| Symbol patterns to include
| link:#mrdocs-Config-Settings-includes[`includes`] 
| Include paths
| link:#mrdocs-Config-Settings-inheritBaseMembers[`inheritBaseMembers`] 
| Determine how derived classes inherit base members
| link:#mrdocs-Config-Settings-input[`input`] 
| Input directories to extract symbols from
| link:#mrdocs-Config-Settings-legibleNames[`legibleNames`] 
| Use legible names
| link:#mrdocs-Config-Settings-libcIncludes[`libcIncludes`] 
| Standard Library include paths
| link:#mrdocs-Config-Settings-linkcss[`linkcss`] 
| Link stylesheets instead of embedding them
| link:#mrdocs-Config-Settings-logLevel[`logLevel`] 
| The minimum reporting level
| link:#mrdocs-Config-Settings-missingIncludePrefixes[`missingIncludePrefixes`] 
| Include path prefixes allowed to be missing
| link:#mrdocs-Config-Settings-missingIncludeShims[`missingIncludeShims`] 
| Shims for forgiven missing include files
| link:#mrdocs-Config-Settings-mrdocsRootDir[`mrdocsRootDir`] 
| Full path to the mrdocs root directory
| link:#mrdocs-Config-Settings-multipage[`multipage`] 
| Generate a multipage documentation
| link:#mrdocs-Config-Settings-noDefaultStyles[`noDefaultStyles`] 
| Disable the bundled default stylesheet
| link:#mrdocs-Config-Settings-output[`output`] 
| Directory or file for generating output
| link:#mrdocs-Config-Settings-overloads[`overloads`] 
| Detect and group function overloads
| link:#mrdocs-Config-Settings-recursive[`recursive`] 
| Recursively include files from &quot;input&quot; paths
| link:#mrdocs-Config-Settings-report[`report`] 
| The minimum reporting level
| link:#mrdocs-Config-Settings-seeBelow[`seeBelow`] 
| Exposition only symbols rendered as &quot;see&hyphen;below&quot;&period;
| link:#mrdocs-Config-Settings-sfinae[`sfinae`] 
| Detect and reduce SFINAE expressions
| link:#mrdocs-Config-Settings-showEnumConstants[`showEnumConstants`] 
| Show enum constant pages in the documentation
| link:#mrdocs-Config-Settings-showNamespaces[`showNamespaces`] 
| Show namespace pages in the documentation
| link:#mrdocs-Config-Settings-sortMembers[`sortMembers`] 
| Sort the members of a record
| link:#mrdocs-Config-Settings-sortMembersAssignment1St[`sortMembersAssignment1St`] 
| Sort assignment operators first
| link:#mrdocs-Config-Settings-sortMembersBy[`sortMembersBy`] 
| Determine how members of a record are sorted
| link:#mrdocs-Config-Settings-sortMembersConversionLast[`sortMembersConversionLast`] 
| Sort conversion operators last
| link:#mrdocs-Config-Settings-sortMembersCtors1St[`sortMembersCtors1St`] 
| Sort constructors first
| link:#mrdocs-Config-Settings-sortMembersDtors1St[`sortMembersDtors1St`] 
| Sort destructors first
| link:#mrdocs-Config-Settings-sortMembersRelationalLast[`sortMembersRelationalLast`] 
| Sort relational operators last
| link:#mrdocs-Config-Settings-sortNamespaceMembersBy[`sortNamespaceMembersBy`] 
| Determine how members of a namespace are sorted
| link:#mrdocs-Config-Settings-sourceRoot[`sourceRoot`] 
| Path to the root directory of the source code
| link:#mrdocs-Config-Settings-stdlibIncludes[`stdlibIncludes`] 
| C&plus;&plus; Standard Library include paths
| link:#mrdocs-Config-Settings-stylesdir[`stylesdir`] 
| Directory for linked stylesheets
| link:#mrdocs-Config-Settings-stylesheets[`stylesheets`] 
| Ordered list of stylesheets to apply to HTML output
| link:#mrdocs-Config-Settings-systemIncludes[`systemIncludes`] 
| System include paths
| link:#mrdocs-Config-Settings-tagfile[`tagfile`] 
| Path for the tagfile
| link:#mrdocs-Config-Settings-useSystemLibc[`useSystemLibc`] 
| Use the system C standard library
| link:#mrdocs-Config-Settings-useSystemStdlib[`useSystemStdlib`] 
| Use the system C&plus;&plus; standard library
| link:#mrdocs-Config-Settings-verbose[`verbose`] 
| Verbose output
| link:#mrdocs-Config-Settings-warnAsError[`warnAsError`] 
| Treat warnings as errors
| link:#mrdocs-Config-Settings-warnBrokenRef[`warnBrokenRef`] 
| Warn if a documentation reference is broken
| link:#mrdocs-Config-Settings-warnIfDocError[`warnIfDocError`] 
| Warn if documentation has errors
| link:#mrdocs-Config-Settings-warnIfUndocEnumVal[`warnIfUndocEnumVal`] 
| Warn if enum values are not documented
| link:#mrdocs-Config-Settings-warnIfUndocumented[`warnIfUndocumented`] 
| Warn if symbols are not documented
| link:#mrdocs-Config-Settings-warnNoParamdoc[`warnNoParamdoc`] 
| Warn if parameters are not documented
| link:#mrdocs-Config-Settings-warnUnnamedParam[`warnUnnamedParam`] 
| Warn if documented functions have unnamed parameters
| link:#mrdocs-Config-Settings-warnings[`warnings`] 
| Enable warning messages
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `llvm::yaml::MappingTraits`
| 
|===

Option validation traits

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct OptionProperties;
----

Enum for &quot;base&hyphen;member&hyphen;inheritance&quot; options

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class BaseMemberInheritance : int;
----

== Description

This enumeration value is valid for the `inherit&hyphen;base&hyphen;members` option

Enum for &quot;generator&quot; options

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class Generator : int;
----

== Description

This enumeration value is valid for the `generator` option

Enum for &quot;log&hyphen;level&quot; options

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class LogLevel : int;
----

== Description

This enumeration value is valid for the `log&hyphen;level` option

Option Type

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class OptionType : int;
----

Enum for &quot;sort&hyphen;symbol&hyphen;by&quot; options

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class SortSymbolBy : int;
----

== Description

These enumeration values are valid for the following options&colon;

* sort&hyphen;members&hyphen;by
* sort&hyphen;namespace&hyphen;members&hyphen;by

Full path to the config file directory

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
configDir() const;
----

== Description

The reference directory for most MrDocs options is the directory of the mrdocs&period;yml file&period;

It is used to calculate full paths from relative paths&period;

This string will always be native style and have a trailing directory separator&period;

== Return Value

The full path to the config file directory&period;

Normalize the configuration values with a visitor

== Synopses

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

Normalize the configuration values with a visitor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-Config-Settings-normalize-09[normalize](link:#mrdocs-ReferenceDirectories[ReferenceDirectories] const& dirs);
----

[.small]#link:#mrdocs-Config-Settings-normalize-09[_» more&period;&period;&period;_]#

Normalize the configuration values with a visitor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-Config-Settings-normalize-0d[normalize](
    link:#mrdocs-ReferenceDirectories[ReferenceDirectories] const& dirs,
    F&& f);
----

[.small]#link:#mrdocs-Config-Settings-normalize-0d[_» more&period;&period;&period;_]#

== Return Value

Expected&lt;void&gt; with the error if any

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dirs*
| The reference directories to resolve paths
| *f*
| The visitor
|===

Normalize the configuration values with a visitor

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
normalize(link:#mrdocs-ReferenceDirectories[ReferenceDirectories] const& dirs);
----

== Description

This function normalizes and validates the configuration values&period;

== Return Value

Expected&lt;void&gt; with the error if any

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dirs*
| The reference directories to resolve paths
|===

Normalize the configuration values with a visitor

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
normalize(
    link:#mrdocs-ReferenceDirectories[ReferenceDirectories] const& dirs,
    F&& f);
----

== Description

This function normalizes and validates the configuration values&period;

== Return Value

Expected&lt;void&gt; with the error if any

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dirs*
| The reference directories to resolve paths
| *f*
| The visitor
|===

Provide pointer&hyphen;like access to settings fields&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Config-Settings[Settings] const*
operator&hyphen;&gt;() const noexcept;
----

== Return Value

Pointer to this Settings instance&period;

Full path to the output directory

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
outputDir() const;
----

== Description

The reference directory for MrDocs output and temporary files is the output directory&period;

This is either the output option (if already a directory) or the parent directory of the output option (if it is a file)&period;

When the output option is a path that does not exist, we determine if it&apos;s a file or directory by checking if the filename contains a period&period;

This string will always be native style and have a trailing directory separator&period;

== Return Value

The full path to the output directory&period;

Visit all options

== Synopses

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

Visit all options


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
void
link:#mrdocs-Config-Settings-visit-0f[visit](F&& f);
----

[.small]#link:#mrdocs-Config-Settings-visit-0f[_» more&period;&period;&period;_]#

Visit all options


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
void
link:#mrdocs-Config-Settings-visit-01[visit](F&& f) const;
----

[.small]#link:#mrdocs-Config-Settings-visit-01[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The visitor
|===

Visit all options

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
void
visit(F&& f);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The visitor
|===

Visit all options

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
void
visit(F&& f) const;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The visitor
|===

== Synopses

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
link:#mrdocs-Config-Settings-fromString-07[fromString](
    std::string&lowbar;view const str,
    BaseMemberInheritance& e);
----

[.small]#link:#mrdocs-Config-Settings-fromString-07[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
link:#mrdocs-Config-Settings-fromString-09[fromString](
    std::string&lowbar;view const str,
    Generator& e);
----

[.small]#link:#mrdocs-Config-Settings-fromString-09[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
link:#mrdocs-Config-Settings-fromString-0b[fromString](
    std::string&lowbar;view const str,
    LogLevel& e);
----

[.small]#link:#mrdocs-Config-Settings-fromString-0b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
link:#mrdocs-Config-Settings-fromString-08[fromString](
    std::string&lowbar;view const str,
    SortSymbolBy& e);
----

[.small]#link:#mrdocs-Config-Settings-fromString-08[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
fromString(
    std::string&lowbar;view const str,
    BaseMemberInheritance& e);
----

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
fromString(
    std::string&lowbar;view const str,
    Generator& e);
----

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
fromString(
    std::string&lowbar;view const str,
    LogLevel& e);
----

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
fromString(
    std::string&lowbar;view const str,
    SortSymbolBy& e);
----

`load` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

Load the configuration from a YAML string


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-Config-Settings-load-06[load](
    PublicSettings& s,
    std::string&lowbar;view configYaml);
----

[.small]#link:#mrdocs-Config-Settings-load-06[_» more&period;&period;&period;_]#

Loads the public configuration settings from the specified YAML file&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-Config-Settings-load-0b[load](
    link:#mrdocs-Config-Settings[Config::Settings]& s,
    std::string&lowbar;view configYaml,
    link:#mrdocs-ReferenceDirectories[ReferenceDirectories] const& dirs);
----

[.small]#link:#mrdocs-Config-Settings-load-0b[_» more&period;&period;&period;_]#

== Return Value

* Expected&lt;void&gt; with the error if any
* An Expected object containing a Config&colon;&colon;Settings object if the YAML file was successfully parsed and the configuration settings were loaded, or an error otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The PublicSettings object to load the configuration into
| *configYaml*
| The YAML string with the configuration
| *dirs*
| A constant reference to a PublicSettings&colon;&colon;ReferenceDirectories object containing the reference directories&period;
|===

Load the configuration from a YAML string

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
load(
    PublicSettings& s,
    std::string&lowbar;view configYaml);
----

== Description

This function loads the values from the YAML string without normalizing or validating them&period;

After calling this function, call `normalize` to normalize and validate the options&period;

== Return Value

Expected&lt;void&gt; with the error if any

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The PublicSettings object to load the configuration into
| *configYaml*
| The YAML string with the configuration
|===

Loads the public configuration settings from the specified YAML file&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
load(
    link:#mrdocs-Config-Settings[Config::Settings]& s,
    std::string&lowbar;view configYaml,
    link:#mrdocs-ReferenceDirectories[ReferenceDirectories] const& dirs);
----

== Description

This function takes a YAML file and a set of reference directories as input&period; It parses the YAML file and loads the configuration settings into a Config&colon;&colon;Settings object&period; The reference directories are used to resolve any relative paths in the configuration settings&period;

== Return Value

An Expected object containing a Config&colon;&colon;Settings object if the YAML file was successfully parsed and the configuration settings were loaded, or an error otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| A reference to a Config&colon;&colon;Settings object where the configuration settings will be loaded&period;
| *configYaml*
| A string view representing the YAML file containing the configuration settings&period;
| *dirs*
| A constant reference to a PublicSettings&colon;&colon;ReferenceDirectories object containing the reference directories&period;
|===

Loads the public configuration settings from the specified file&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
load&lowbar;file(
    link:#mrdocs-Config-Settings[Config::Settings]& s,
    std::string&lowbar;view configPath,
    link:#mrdocs-ReferenceDirectories[ReferenceDirectories] const& dirs);
----

== Description

This function takes a file path and a set of reference directories as input&period; It reads the file and loads the configuration settings into a Config&colon;&colon;Settings object&period; The reference directories are used to resolve any relative paths in the configuration settings&period;

== Return Value

An Expected object containing void if the file was successfully read and the configuration settings were loaded, or an error otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| A reference to a Config&colon;&colon;Settings object where the configuration settings will be loaded&period;
| *configPath*
| A string view representing the file path of the configuration settings&period;
| *dirs*
| A constant reference to a PublicSettings&colon;&colon;ReferenceDirectories object containing the reference directories&period;
|===

== Synopses

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::string&lowbar;view
link:#mrdocs-Config-Settings-toString-04[toString](BaseMemberInheritance const e);
----

[.small]#link:#mrdocs-Config-Settings-toString-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::string&lowbar;view
link:#mrdocs-Config-Settings-toString-01[toString](Generator const e);
----

[.small]#link:#mrdocs-Config-Settings-toString-01[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::string&lowbar;view
link:#mrdocs-Config-Settings-toString-06[toString](LogLevel const e);
----

[.small]#link:#mrdocs-Config-Settings-toString-06[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::string&lowbar;view
link:#mrdocs-Config-Settings-toString-03[toString](SortSymbolBy const e);
----

[.small]#link:#mrdocs-Config-Settings-toString-03[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::string&lowbar;view
toString(BaseMemberInheritance const e);
----

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::string&lowbar;view
toString(Generator const e);
----

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::string&lowbar;view
toString(LogLevel const e);
----

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::string&lowbar;view
toString(SortSymbolBy const e);
----

Path to the Addons directory

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string addons;
----

== Description

Path to the Addons directory&period;

The Addons directory contains the template files used by generators to create the documentation&period;

When a custom Addons directory is not specified, the default templates are used&period;

The default templates are located at the `share&sol;mrdocs&sol;addons` directory of the MrDocs installation&period;

Users can create custom templates by copying the default templates to a custom directory and specifying the custom directory using this option&period;

Additional addons layered on top of the base addons

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; addonsSupplemental;
----

== Description

Optional list of supplemental addons directories that are loaded after the base addons (built&hyphen;in or replacement)&period;

Files in later supplemental directories override files from earlier ones and from the base addons&period;

Use this to add or override a few templates&sol;helpers without copying the entire addons tree&period;

command is required&period;

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool autoBrief = true;
----

== Description

Use the first line of the comment as the brief

When set to `true`, Mr&period;Docs uses the first line (until the first dot, question mark, or exclamation mark) of the comment as the brief of the symbol&period;

When set to `false`, a explicit

Automatically provide missing documentation for special functions and trivial metadata

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool autoFunctionMetadata = true;
----

== Description

When set to `true`, Mr&period;Docs automatically provides documentation for special functions, such as constructors, destructors, and operators&period;

It also provides documentation for missing documentation metadata, such as known types&period;

Automatically detect function objects

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool autoFunctionObjects = true;
----

== Description

When true, Mr&period;Docs automatically detects function objects&colon; variables whose type is a record whose only public non&hyphen;special members are operator() overloads&period;

Set to false to disable auto&hyphen;detection and rely solely on the

&sol;

doc command&period;

The

command is still useful when auto&hyphen;detection is enabled, to force treatment of types that fail auto&hyphen;detection (e&period;g&period;

because they have extra public members)&period;

When a variable is treated as a function object, only the operator() documentation is used&semi; any doc comment (other than a

&sol;

command) on the variable or the record is ignored&period;

Automatically find non&hyphen;member functions

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool autoRelates = true;
----

== Description

When set to `true`, Mr&period;Docs automatically finds non&hyphen;member functions that are related to the current class&period;

Base URL for links to source code

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string baseUrl;
----

== Description

Base URL for links to source code&period;

The base URL is used to create links to the source code in the documentation&period;

The base URL is combined with the path to the source file to create the link&period;

CMake arguments when generating the compilation database from CMakeLists&period;txt

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string cmake;
----

== Description

When the compilation&hyphen;database option is a CMakeLists&period;txt file, these arguments are passed to the cmake command to generate the compilation&lowbar;database&period;json&period;

Configuration or compilation database files

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; cmdLineInputs;
----

== Description

The inputs are configuration files or compilation database files that used to generate the documentation&period;

When the input ends with `mrdocs&period;yml`, it is interpreted as a configuration file, the file is read and the options are used to generate the documentation as if it was provided to the `config` option&period;

When the input ends with `compilation&lowbar;database&period;json` or `CMakeLists&period;txt`, it is interpreted as a compilation database file, the file is read and the compiler flags are used to generate the documentation as if it was provided to the `compilation&hyphen;database` option&period;

Path to the compilation database

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string compilationDatabase;
----

== Description

Path to the compilation database or a build script to generate it&period;

The compilation database is a JSON file that contains the compiler commands used to build the source code&period;

The compilation database is used to extract the compiler flags and the source files used to build the source code and extract symbols&period;

This option also accepts the path to a build script such as CMakeLists&period;txt to be used to generate the compilation database&period;

In this case, Mr&period;Docs will look for CMake in `PATH` or in `CMAKE&lowbar;ROOT` and run the script to generate the compilation database file&period;

Number of threads to use

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
unsigned int concurrency = 0;
----

== Description

The desired level of concurrency&colon; 0 for hardware&hyphen;suggested&period;

Mr&period;Docs configuration file

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string config;
----

== Description

The configuration file is a YAML file that contains the options used to generate the documentation&period;

The configuration file is read and the options are used to generate the documentation&period;

The configuration file can be used to specify the source code, the output directory, the compilation database, the generator, and the filters&period;

A string holding the complete configuration YAML&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string configYaml;
----

Copy local stylesheets when linking

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool copycss = true;
----

== Description

When `linkcss` is true, copy bundled and local stylesheet files into the output under `stylesdir`&period;

Remote URLs are not copied&period;

Set to false to skip copying&period;

Full path to the current working directory

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string cwdDir = &quot;&period;&quot;;
----

== Description

This string will always be native style and have a trailing directory separator&period;

Additional defines passed to the compiler

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; defines;
----

== Description

Additional defines passed to the compiler when building the source code&period;

These defines are added to the compilation database regardless of the strategy to generate it&period;

Output an embeddable document

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool embedded = false;
----

== Description

Output an embeddable document, which excludes the header, the footer, and everything outside the body of the document&period;

This option is useful for producing documents that can be inserted into an external template&period;

Input directories to exclude

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; exclude;
----

== Description

Symbols defined in files in these directories are not extracted even if they are in the list of include directories&period;

When relative, the paths are relative to the directory of the mrdocs configuration file&period;

For instance, &quot;include&sol;experimental&quot; will exclude all files in the directory `&lt;config&hyphen;dir&gt;&sol;include&sol;experimental`&period;

File patterns to exclude

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;PathGlobPattern&gt; excludePatterns;
----

== Description

File patterns to exclude&period;

Files that match these patterns are not extracted even if they are in the list of include directories&period;

The patterns are relative to the configuration file&period;

A single &ast; will match all files in the directory&period;

Double &ast;&ast; will match all files in the directory and its subdirectories&period;

Symbol patterns to exclude

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolGlobPattern&gt; excludeSymbols;
----

== Description

A symbol that matches one of these patterns is not extracted even if whitelisted by &quot;include&hyphen;symbols&quot;&period;

See the documentation for &quot;include&hyphen;symbols&quot; for the pattern syntax&period;

Extract all symbols

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractAll = true;
----

== Description

When set to `true`, MrDocs extracts all symbols from the source code, even if no documentation is provided&period;

MrDocs can only identify whether a symbol is ultimated documented after extracting information from all translation units&period;

For this reason, when this option is set to `false`, it&apos;s still recommendable to provide file and symbol filters so that only the desired symbols are traversed and stored by MrDocs&period;

Extraction policy for anonymous namespaces

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractAnonymousNamespaces = true;
----

== Description

Determine whether symbols in anonymous namespaces should be extracted&period;

Extraction policy for empty namespaces

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractEmptyNamespaces = false;
----

== Description

Determine whether empty namespaces without documentation should be extracted&period;

Extraction policy for friend functions and classes

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractFriends = true;
----

== Description

Determine whether friend functions and classes should be extracted&period;

When set to `true`, MrDocs extracts friend functions and classes&period;

When set to `false`, friend functions and classes are not extracted&period;

Implicit template specializations used as base classes are extracted as dependencies

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractImplicitSpecializations = true;
----

== Description

When set to `true`, MrDocs extracts implicit template specializations used as base classes as dependencies&period;

This allows MrDocs to extract metadata that can later be used to determine the members of the derived class, as specified by the `inherit&hyphen;base&hyphen;members` option&period;

Extraction policy for records defined locally in source files

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractLocalClasses = true;
----

== Description

Determine whether records only defined locally in source files should be extracted&period;

Extraction policy for private class members

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractPrivate = false;
----

== Description

Determine whether private class members should be extracted

Extraction policy for private base classes

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractPrivateBases = false;
----

== Description

Determine whether private base classes should be extracted

Extraction policy for private virtual methods of a class

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractPrivateVirtual = false;
----

== Description

Determine whether private virtual methods of a class should be extracted

Extraction policy for static members of a file

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool extractStatic = false;
----

== Description

Determine whether static members of a file should be extracted&period;

This option does not refer to static members of a class&period;

File patterns to include

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;PathGlobPattern&gt; filePatterns;
----

== Description

File patterns to include&period;

Only the files that match these patterns are extracted&period;

The patterns are relative to the input directories&period;

Generator used to create the documentation

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Generator generator = Generator&colon;&colon;Adoc;
----

== Description

The generator is responsible for creating the documentation from the extracted symbols&period;

The generator uses the extracted symbols and the templates to create the documentation&period;

The generator can create different types of documentation such as HTML, XML, and AsciiDoc&period;

Use the global namespace page as an index for all symbols

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool globalNamespaceIndex = true;
----

== Description

When set to true, the page for the global namespace will recursively list all symbols in the documentation, not just those in the global namespace&period;

This makes the global namespace page act as an index for the entire project&period;

Whether AST visitation failures should not stop the program

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool ignoreFailures = false;
----

== Description

When set to true, MrDocs continues to generate the documentation even if there are AST visitation failures&period;

AST visitation failures occur when the source code contains constructs that are not supported by MrDocs&period;

Continue if files are not mapped correctly

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool ignoreMapErrors = false;
----

== Description

When set to true, MrDocs continues to generate the documentation even if some files are not mapped correctly&period;

Files are not mapped correctly when the source file is not found or the compilation database does not contain the compiler flags for the source file&period;

Symbols rendered as &quot;implementation&hyphen;defined&quot;

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolGlobPattern&gt; implementationDefined;
----

== Description

Symbols that match one of these filters are tagged as &quot;implementation&hyphen;defined&quot; in the documentation, and so do symbols in scopes tagged as &quot;implementation&hyphen;defined&quot;&period;

This option is used to exclude symbols from the documentation that are considered part of the private API of the project&period;

An &quot;implementation&hyphen;defined&quot; symbol has no documentation page in the output&period;

If any other symbol refers to it, the reference is rendered as &quot;implementation&hyphen;defined&quot;&period;

See the documentation for &quot;include&hyphen;symbol&quot; for the pattern syntax&period;

Symbol patterns to include

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolGlobPattern&gt; includeSymbols;
----

== Description

If any patterns are defined here, only symbols that match one of these patterns are extracted&period;

The patterns are applied to the fully qualified name of the symbol without any leading &quot;&colon;&colon;&quot;&period;

A single &quot;&ast;&quot; will match all symbols in the namespace&period;

Double &quot;&ast;&ast;&quot; will match all symbols in the namespace and its subnamespaces&period;

The patterns also support &quot;?&quot; for any chars, &quot;&lsqb;&lt;chars&gt;&rsqb;&quot; for charsets, &quot;&lsqb;&rsqb;&quot; for inverted charsets, and &quot;&lcub;&lt;glob&gt;,&period;&period;&period;&rcub;&quot; for alternatives&period;

Include paths

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; includes;
----

== Description

Include paths&period;

These paths are used to add directories to the include search path&period;

The include search path is used to search for headers&period;

The headers are used to provide declarations and definitions of symbols&period;

The headers are part of the project and are checked for warnings and errors&period;

Determine how derived classes inherit base members

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
BaseMemberInheritance inheritBaseMembers = BaseMemberInheritance&colon;&colon;CopyDependencies;
----

== Description

Determine how derived classes inherit members of base classes&period;

When set to `never`, derived classes do not inherit members of base classes and only the relationship is stored&period;

When set to `reference`, derived classes list members of base classes but references are still linked to the base class&period;

When set to `copy&hyphen;dependencies`, a reference is created by default and a copy is created when the base class is a dependency&period;

When set to `copy&hyphen;all`, a copy is created for each base symbol as if it was declared in the derived class&period;

If the base class is a dependency, the extraction mode is copied from the new parent&period;

Input directories to extract symbols from

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; input;
----

== Description

Input directories to extract&period;

Only symbols defined in files in these directories are extracted&period;

The paths are relative to the mrdocs configuration file&period;

Use legible names

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool legibleNames = true;
----

== Description

Use legible names for ids in the documentation&period;

When set to true, MrDocs uses legible names for symbols in the documentation&period;

These are symbols that are legible but still safe for URLs&period;

When the option is set to false, MrDocs uses a hash of the symbol ID&period;

Standard Library include paths

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; libcIncludes;
----

== Description

When `use&hyphen;system&hyphen;libc` is disabled, the C standard library headers are available in these paths&period;

Link stylesheets instead of embedding them

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool linkcss = false;
----

== Description

When set to true, stylesheets are linked with `&lt;link&gt;` tags instead of being inlined&period;

Links use `stylesdir` plus the stylesheet name (e&period;g&period;

`css&sol;custom&period;css`)&period;

Local styles are copied unless `copycss` is false&semi; remote URLs are linked as&hyphen;is&period;

The minimum reporting level

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
LogLevel logLevel = LogLevel&colon;&colon;Info;
----

== Description

The reporting level determines the amount of information displayed during the generation of the documentation&period;

Include path prefixes allowed to be missing

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; missingIncludePrefixes;
----

== Description

Specifies path prefixes for include files that, if missing, will not cause documentation generation to fail&period;

Missing files with these prefixes are served as empty files from an in&hyphen;memory file system, allowing processing to continue&period;

For example, use &quot;llvm&sol;&quot; to forgive all includes from LLVM&period;

If any such path is specified, MrDocs will attempt to synthesize missing included types&period;

Only simple sets of non&hyphen;conflicting inferred types can be synthesized&period;

For more complex types or for better control, provide a shim using the &quot;missing&hyphen;include&hyphen;shims&quot; option&period;

Shims for forgiven missing include files

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::map&lt;std::string, std::string&gt; missingIncludeShims;
----

== Description

Specifies a map of include file paths to shim contents&period;

If a missing include file matches a forgiven prefix, MrDocs will use the shim content from this map as the file contents&period;

If no shim is provided for a forgiven file, an empty file is used by default&period;

Full path to the mrdocs root directory

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string mrdocsRootDir;
----

== Description

This is the directory containing the mrdocs executable and the shared files&period;

This string will always be native style and have a trailing directory separator&period;

Generate a multipage documentation

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool multipage = true;
----

== Description

Generates a multipage documentation&period;

The output directory must be a directory&period;

This option acts as a hint to the generator to create a multipage documentation&period;

Whether the hint is followed or not depends on the generator&period;

Disable the bundled default stylesheet

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool noDefaultStyles = false;
----

== Description

When set to true, the bundled stylesheet is not applied&period;

Combine with an empty `stylesheets` list to emit no styles at all&period;

Directory or file for generating output

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string output;
----

== Description

Multipage generators expect a directory&period;

Single page generators expect a file or a directory where the file will be created&period;

If the directory does not exist, it will be created&period;

Detect and group function overloads

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool overloads = true;
----

== Description

When set to `true`, MrDocs detects function overloads and groups them as a single symbol type&period;

The documentation for this new symbol comes from the union of non&hyphen;ambiguous metadata from the functions&period;

Recursively include files from &quot;input&quot; paths

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool recursive = true;
----

== Description

Recursively include files&period;

When set to true, Mr&period;Docs includes files in subdirectories of the input directories&period;

When set to false, Mr&period;Docs includes only the files in the input directories&period;

The minimum reporting level

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
unsigned int report = &hyphen;1;
----

== Description

The reporting level determines the amount of information displayed during the generation of the documentation&period;

The value `&hyphen;1` delegates the decision to the `log&hyphen;level` option&period;

Exposition only symbols rendered as &quot;see&hyphen;below&quot;&period;

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolGlobPattern&gt; seeBelow;
----

== Description

Symbols that match one of these filters are tagged as &quot;see&hyphen;below&quot; in the documentation, and so do symbols in scopes tagged as &quot;see&hyphen;below&quot;&period;

This option is used to remove details about symbols that are considered part of the private API of the project but the user might need to interact with&period;

In the documentation page for this symbol, the symbol is exposition only&colon; the synopsis of the implementation is rendered as &quot;see&hyphen;below&quot; and members of scopes (such as a namespace or record) are not listed&period;

The rest of the documentation is rendered as usual to explain the symbol&period;

See the documentation for &quot;include&hyphen;symbol&quot; for the pattern syntax&period;

Detect and reduce SFINAE expressions

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool sfinae = true;
----

== Description

When set to true, MrDocs detects SFINAE expressions in the source code and extracts them as part of the documentation&period;

Expressions such as `std&colon;&colon;enable&lowbar;if&lt;&period;&period;&period;&gt;` are detected, removed, and documented as a requirement&period;

MrDocs uses an algorithm that extracts SFINAE infomation from types by identifying inspecting the primary template and specializations to detect the result type and the controlling expressions in a specialization&period;

Show enum constant pages in the documentation

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool showEnumConstants = false;
----

== Description

When set to true, MrDocs creates a page for each enum constant in the documentation&period;

Show namespace pages in the documentation

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool showNamespaces = true;
----

== Description

When set to true, MrDocs creates a page for each namespace in the documentation&period;

Sort the members of a record

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool sortMembers = true;
----

== Description

When set to `true`, sort the members of a record by the criterion determined in the `sort&hyphen;members&hyphen;by` option&period;

When set to `false`, the members are included in the declaration order they are extracted&period;

Sort assignment operators first

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool sortMembersAssignment1St = true;
----

== Description

When set to `true`, assignment operators are sorted first in the list of members of a record&period;

Determine how members of a record are sorted

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
SortSymbolBy sortMembersBy = SortSymbolBy&colon;&colon;Name;
----

== Description

If `sort&hyphen;members` is set to `true`, determine how members of a record are sorted&period;

When set to `name`, members are sorted by name&period;

When set to `location`, members are sorted by their primary location in the source code, considering the short name of the path and the location in the file&period;

Sort conversion operators last

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool sortMembersConversionLast = true;
----

== Description

When set to `true`, conversion operators are sorted last in the list of members of a record or namespace&period;

Sort constructors first

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool sortMembersCtors1St = true;
----

== Description

When set to `true`, constructors are sorted first in the list of members of a record&period;

Sort destructors first

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool sortMembersDtors1St = true;
----

== Description

When set to `true`, destructors are sorted first in the list of members of a record&period;

Sort relational operators last

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool sortMembersRelationalLast = true;
----

== Description

When set to `true`, relational operators are sorted last in the list of members of a record or namespace&period;

Determine how members of a namespace are sorted

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
SortSymbolBy sortNamespaceMembersBy = SortSymbolBy&colon;&colon;Name;
----

== Description

Although members of namespaces are always sorted, determine how members of a namespace are sorted&period;

When set to `name`, members are sorted by name&period;

When set to `location`, members are sorted by their primary location in the source code, considering the short name of the path and the location in the file&period;

Path to the root directory of the source code

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string sourceRoot;
----

== Description

Path to the root directory of the source code&period;

This path is used as a default for input files and a base for relative paths formed from absolute paths&period;

This should typically be the root directory of the git project, as relative paths formed from it can be used to create links to these source files in the repository&period;

Templates use the `base&hyphen;url` option to create links to the source code&period;

C&plus;&plus; Standard Library include paths

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; stdlibIncludes;
----

== Description

When `use&hyphen;system&hyphen;stdlib` is disabled, the C&plus;&plus; standard library headers are available in these paths&period;

Directory for linked stylesheets

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string stylesdir;
----

== Description

Directory used to build the href for linked stylesheets when `linkcss` is true&period;

Defaults to `css`&period;

The directory is created under the output root when copying local styles (e&period;g&period;

`css&sol;mrdocs&hyphen;default&period;css`)&period;

Ordered list of stylesheets to apply to HTML output

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; stylesheets;
----

== Description

Ordered list of stylesheet names or paths&period;

If empty, the bundled stylesheet is used&period;

Entries can be local paths or remote URLs&semi; remote URLs are only linked when `linkcss` is true&period;

Inline mode embeds local styles&semi; link mode emits `&lt;link&gt;` tags for each entry and copies local files&period;

System include paths

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; systemIncludes;
----

== Description

System include paths&period;

These paths are used to add directories to the system include search path&period;

The system include search path is used to search for system headers&period;

The system headers are headers that are provided by the system and are not part of the project&period;

The system headers are used to provide the standard library headers and other system headers&period;

The system headers are not part of the project and are not checked for warnings and errors&period;

Path for the tagfile

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string tagfile;
----

== Description

Specifies the full path (filename) where the generated tagfile should be saved&period;

If left empty, no tagfile will be generated&period;

Use the system C standard library

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool useSystemLibc = true;
----

== Description

To achieve reproducible results, MrDocs bundles the LibC headers with its definitions&period;

To use the C standard library available in the system instead, set this option to true&period;

Use the system C&plus;&plus; standard library

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool useSystemStdlib = true;
----

== Description

To achieve reproducible results, MrDocs bundles the LibC&plus;&plus; headers&period;

To use the C&plus;&plus; standard library available in the system instead, set this option to true&period;

Verbose output

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool verbose = false;
----

== Description

Verbose output&period;

When set to true, MrDocs outputs additional information during the generation of the documentation&period;

Treat warnings as errors

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool warnAsError = false;
----

== Description

When set to `true`, MrDocs treats warnings as errors and stops the generation of the documentation&period;

Warn if a documentation reference is broken

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool warnBrokenRef = true;
----

== Description

When set to `true`, MrDocs outputs a warning message if a reference in the documentation is broken&period;

Warn if documentation has errors

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool warnIfDocError = true;
----

== Description

When set to `true`, MrDocs outputs a warning message if the documentation of a symbol has errors such as duplicate parameters and parameters that don&apos;t exist&period;

Warn if enum values are not documented

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool warnIfUndocEnumVal = true;
----

== Description

When set to `true`, MrDocs outputs a warning message if an enum value is not documented&period;

Warn if symbols are not documented

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool warnIfUndocumented = true;
----

== Description

When set to `true`, MrDocs outputs a warning message if a symbol that passes all filters is not documented&period;

Warn if parameters are not documented

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool warnNoParamdoc = true;
----

== Description

When set to `true`, MrDocs outputs a warning message if a named function parameter is not documented&period;

Warn if documented functions have unnamed parameters

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool warnUnnamedParam = false;
----

== Description

When set to `true`, MrDocs outputs a warning message if a documented function has a parameter that is not named&period;

Enable warning messages

== Synopsis

Declared in `&lt;mrdocs&sol;PublicSettings&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool warnings = true;
----

== Description

When set to `true`, MrDocs outputs warning messages during the generation of the documentation&period;

It is usually recommended to enable warnings while writing the documentation&period;

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;Config() noexcept = 0;
----

Return a DOM object representing the configuration keys&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-Object[dom::Object] const&
object() const = 0;
----

== Description

The object is invalidated when the configuration is moved or destroyed&period;

== Return Value

a DOM object representing the configuration keys&period;

Return the settings used to generate the Corpus and Docs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Config-Settings[Settings] const*
operator&hyphen;&gt;() const noexcept;
----

== Return Value

the settings used to generate the Corpus and Docs&period;

Return the settings used to generate the Corpus and Docs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Config-Settings[Settings] const&
settings() const noexcept = 0;
----

== Return Value

the settings used to generate the Corpus and Docs&period;

Return a pool of threads for executing work&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-ThreadPool[ThreadPool]&
threadPool() const noexcept = 0;
----

== Return Value

a pool of threads for executing work&period;

Construct an empty configuration interface&period; Implementations populate settings in derived classes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Config() noexcept;
----

Represents an expression with a (possibly known) value

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
struct ConstantExprInfo
    : link:#mrdocs-ExprInfo[ExprInfo]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-ExprInfo[ExprInfo]`
| Represents an expression
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ConstantExprInfo-type[`type`] 
| The underlying type of the expression
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExprInfo-asExpr-00[`asExpr`] 
| View this object as its base expression&period;
| link:#mrdocs-ConstantExprInfo-operator_3way-00[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ConstantExprInfo-Value[`Value`] 
| The expressions value, if it is known
| link:#mrdocs-ExprInfo-Written[`Written`] 
| The expression, as written
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-merge-05[`merge`]
| Merge metadata from another expression&period;
| link:#mrdocs-merge-07[`merge`]
| Merge metadata from another constant expression&period;
|===

The underlying type of the expression

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using type = T;
----

Three&hyphen;way comparison operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

Order constant expressions by written form and value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-ConstantExprInfo-operator_3way-08[operator&lt;&equals;&gt;](link:#mrdocs-ConstantExprInfo[ConstantExprInfo] const& rhs) const = default;
----

[.small]#link:#mrdocs-ConstantExprInfo-operator_3way-08[_» more&period;&period;&period;_]#

Order expressions by written form&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-ExprInfo-operator_3way[operator&lt;&equals;&gt;](link:#mrdocs-ExprInfo[ExprInfo] const& rhs) const = default;
----

[.small]#link:#mrdocs-ExprInfo-operator_3way[_» more&period;&period;&period;_]#

Order constant expressions by written form and value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(link:#mrdocs-ConstantExprInfo[ConstantExprInfo] const& rhs) const = default;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

Order expressions by written form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
operator&lt;&equals;&gt;(link:#mrdocs-ExprInfo[ExprInfo] const& rhs) const = default;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

The expressions value, if it is known

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;type&gt;] Value;
----

== Description

The value of an expression will be unknown if it is e&period;g&period; dependent on a template parameter

Non&hyphen;type template argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;ConstantTArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ConstantTArg final
    : link:#mrdocs-TArgCommonBase-06[TArgCommonBase&lt;TArgKind&colon;&colon;Constant&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TArgCommonBase-06[TArgCommonBase&lt;TArgKind&colon;&colon;Constant&gt;]`
| CRTP base that fixes the argument kind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-ConstantTArg-isConstant[`isConstant`] 
| link:#mrdocs-ConstantTArg-isTemplate[`isTemplate`] 
| link:#mrdocs-ConstantTArg-isType[`isType`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ConstantTArg-Value[`Value`] 
| Template argument expression&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-ConstantTArg-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-087[`toString`]
| Convert a template argument to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTemplate() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isType() noexcept;
----

Template argument expression&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;ConstantTArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo] Value;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TArgKind[TArgKind] kind&lowbar;id;
----

A constant template parameter

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;ConstantTParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ConstantTParam final
    : link:#mrdocs-TParamCommonBase-0c[TParamCommonBase&lt;TParamKind&colon;&colon;Constant&gt;]
----

== Description

Before C&plus;&plus;26, constant template parameters were called non&hyphen;type template parameter in the standard wording&period; The terminology was changed by P2841R6 &sol; PR&num;7587&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TParamCommonBase-0c[TParamCommonBase&lt;TParamKind&colon;&colon;Constant&gt;]`
| CRTP base that fixes the parameter kind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-ConstantTParam-isConstant[`isConstant`] 
| link:#mrdocs-ConstantTParam-isTemplate[`isTemplate`] 
| link:#mrdocs-ConstantTParam-isType[`isType`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ConstantTParam-Type[`Type`] 
| Type of the non&hyphen;type template parameter
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-ConstantTParam-kind_id[`kind&lowbar;id`] 
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTemplate() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isType() noexcept;
----

Type of the non&hyphen;type template parameter

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;ConstantTParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] Type = Polymorphic&lt;struct Type&gt;(AutoType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TParamKind[TParamKind] kind&lowbar;id;
----

The collection of declarations in extracted form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Corpus;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Corpus-TraverseOptions[`TraverseOptions`] 
| Options to traverse the members of an Symbol&period;
| link:#mrdocs-Corpus-iterator[`iterator`] 
| The iterator type for the index of all symbols&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Corpus-2destructor[`&#126;Corpus`] [.small]#[destructor]# [.small]#[virtual]#
| Destructor&period;
| link:#mrdocs-Corpus-begin[`begin`]  [.small]#[virtual]#
| Return the begin iterator for the index of all symbols&period;
| link:#mrdocs-Corpus-empty[`empty`] 
| Whether the corpus contains any symbols&period;
| link:#mrdocs-Corpus-end[`end`]  [.small]#[virtual]#
| Return the end iterator for the index&period;
| link:#mrdocs-Corpus-exists[`exists`] 
| Return true if an Symbol with the specified symbol ID exists&period;
| link:#mrdocs-Corpus-find[`find`]  [.small]#[virtual]#
| Return the Symbol with the matching ID, or nullptr&period;
| link:#mrdocs-Corpus-get[`get`] 
| Return the Symbol with the specified symbol ID&period;
| link:#mrdocs-Corpus-globalNamespace[`globalNamespace`] 
| Return the metadata for the global namespace&period;
| link:#mrdocs-Corpus-lookup-05[`lookup`] 
| `lookup` overloads
| link:#mrdocs-Corpus-qualifiedName-0b7[`qualifiedName`] 
| `qualifiedName` overloads
| link:#mrdocs-Corpus-traverse-02[`traverse`] 
| Visit the members of specified Symbol&period;
| link:#mrdocs-Corpus-visitIDs[`visitIDs`] 
| Visit the specified Symbol IDs
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Corpus-config[`config`] 
| The configuration used to generate this corpus&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Corpus-2constructor[`Corpus`]         [.small]#[constructor]#
| Create a corpus using the provided configuration&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-getParents-04[`getParents`]
| Return a list of the parent symbols of the specified Symbol&period;
|===

Options to traverse the members of an Symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TraverseOptions;
----

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Corpus-TraverseOptions-ordered[`ordered`] 
| Whether to traverse in a stable order
| link:#mrdocs-Corpus-TraverseOptions-recursive[`recursive`] 
| Whether to skip inherited members whose parent is not the Symbol
| link:#mrdocs-Corpus-TraverseOptions-skipInherited[`skipInherited`] 
| Whether to skip inherited members whose parent is not the Symbol
|===

Whether to traverse in a stable order

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool ordered = false;
----

Whether to skip inherited members whose parent is not the Symbol

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool recursive = false;
----

Whether to skip inherited members whose parent is not the Symbol

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool skipInherited = false;
----

The iterator type for the index of all symbols&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class iterator;
----

== Description

The iterator is a forward iterator that iterates over all symbols in the index&period; It dereferences to a reference to a const link:#mrdocs-Symbol[`Symbol`]&period;

The logic for incrementing the iterator is provided by the Corpus implementation via a function that retuns the next Symbol in the index, or nullptr if there are no more&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Corpus-iterator-const_pointer[`const&lowbar;pointer`] 
| Pointer to const value&period;
| link:#mrdocs-Corpus-iterator-const_reference[`const&lowbar;reference`] 
| Reference to const value&period;
| link:#mrdocs-Corpus-iterator-difference_type[`difference&lowbar;type`] 
| Signed difference type&period;
| link:#mrdocs-Corpus-iterator-pointer[`pointer`] 
| Pointer to value&period;
| link:#mrdocs-Corpus-iterator-reference[`reference`] 
| Reference to value&period;
| link:#mrdocs-Corpus-iterator-size_type[`size&lowbar;type`] 
| Unsigned size type&period;
| link:#mrdocs-Corpus-iterator-value_type[`value&lowbar;type`] 
| Value type yielded by the iterator&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Corpus-iterator-2constructor-02[`iterator`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-Corpus-iterator-operator_assign[`operator&equals;`] 
| Copy assignment&period;
| link:#mrdocs-Corpus-iterator-operator_star[`operator&ast;`] 
| Dereference to the current symbol&period;
| link:#mrdocs-Corpus-iterator-operator_inc-077[`operator&plus;&plus;`] 
| Increment operators
| link:#mrdocs-Corpus-iterator-operator_ptr[`operator&hyphen;&gt;`] 
| Pointer&hyphen;like access to the current symbol&period;
| link:#mrdocs-Corpus-iterator-operator_eq[`operator&equals;&equals;`] 
| Equality comparison&period;
| link:#mrdocs-Corpus-iterator-operator_not_eq[`operator!&equals;`] 
| Inequality comparison&period;
|===

Pointer to const value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;pointer = link:#mrdocs-Corpus-iterator-value_type[value&lowbar;type] const*;
----

Reference to const value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;reference = link:#mrdocs-Corpus-iterator-value_type[value&lowbar;type] const&;
----

Signed difference type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using difference&lowbar;type = std::ptrdiff&lowbar;t;
----

Pointer to value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using pointer = link:#mrdocs-Corpus-iterator-value_type[value&lowbar;type]*;
----

Reference to value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reference = link:#mrdocs-Corpus-iterator-value_type[value&lowbar;type]&;
----

Unsigned size type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = std::size&lowbar;t;
----

Value type yielded by the iterator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = link:#mrdocs-Symbol[Symbol] const;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

Default constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Corpus-iterator-2constructor-052[iterator]() = default;
----

[.small]#link:#mrdocs-Corpus-iterator-2constructor-052[_» more&period;&period;&period;_]#

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Corpus-iterator-2constructor-05f[iterator](link:#mrdocs-Corpus-iterator[iterator] const& other) = default;
----

[.small]#link:#mrdocs-Corpus-iterator-2constructor-05f[_» more&period;&period;&period;_]#

Construct an iterator from corpus storage pointers&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus-iterator-2constructor-01[iterator](
    link:#mrdocs-Corpus[Corpus] const* corpus,
    link:#mrdocs-Symbol[Symbol] const* val,
    link:#mrdocs-Symbol[Symbol] const*(* next)(link:#mrdocs-Corpus[Corpus] const*, link:#mrdocs-Symbol[Symbol] const*));
----

[.small]#link:#mrdocs-Corpus-iterator-2constructor-01[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *corpus*
| The parent corpus&period;
| *val*
| The current symbol&period;
| *next*
| Function that advances to the next symbol&period;
|===

Default constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
iterator() = default;
----

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
iterator(link:#mrdocs-Corpus-iterator[iterator] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Construct an iterator from corpus storage pointers&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
iterator(
    link:#mrdocs-Corpus[Corpus] const* corpus,
    link:#mrdocs-Symbol[Symbol] const* val,
    link:#mrdocs-Symbol[Symbol] const*(* next)(link:#mrdocs-Corpus[Corpus] const*, link:#mrdocs-Symbol[Symbol] const*));
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *corpus*
| The parent corpus&period;
| *val*
| The current symbol&period;
| *next*
| Function that advances to the next symbol&period;
|===

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Corpus-iterator[iterator]&
operator&equals;(link:#mrdocs-Corpus-iterator[iterator] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Dereference to the current symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus-iterator-const_reference[const&lowbar;reference]
operator&ast;() const noexcept;
----

== Return Value

Reference to the current Symbol&period;

Increment operators

== Synopses

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

Pre&hyphen;increment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus-iterator[iterator]&
link:#mrdocs-Corpus-iterator-operator_inc-0c[operator&plus;&plus;]() noexcept;
----

[.small]#link:#mrdocs-Corpus-iterator-operator_inc-0c[_» more&period;&period;&period;_]#

Post&hyphen;increment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus-iterator[iterator]
link:#mrdocs-Corpus-iterator-operator_inc-07a[operator&plus;&plus;](int dummy) noexcept;
----

[.small]#link:#mrdocs-Corpus-iterator-operator_inc-07a[_» more&period;&period;&period;_]#

== Return Value

* &ast;this advanced to next element&period;
* Iterator prior to increment&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dummy*
| Unused postfix increment discriminator&period;
|===

Pre&hyphen;increment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus-iterator[iterator]&
operator&plus;&plus;() noexcept;
----

== Return Value

&ast;this advanced to next element&period;

Post&hyphen;increment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus-iterator[iterator]
operator&plus;&plus;(int dummy) noexcept;
----

== Return Value

Iterator prior to increment&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dummy*
| Unused postfix increment discriminator&period;
|===

Pointer&hyphen;like access to the current symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus-iterator-const_pointer[const&lowbar;pointer]
operator&hyphen;&gt;() const noexcept;
----

== Return Value

Pointer to the current Symbol&period;

Equality comparison&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(link:#mrdocs-Corpus-iterator[iterator] const& other) const noexcept;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

Inequality comparison&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator!&equals;(link:#mrdocs-Corpus-iterator[iterator] const& other) const noexcept;
----

== Return Value

`true` if the objects are not equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;Corpus() noexcept;
----

Return the begin iterator for the index of all symbols&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Corpus-iterator[iterator]
begin() const noexcept = 0;
----

== Return Value

the begin iterator for the index of all symbols&period;

Whether the corpus contains any symbols&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
empty() const noexcept;
----

== Return Value

true if the corpus is empty, otherwise false&period;

Return the end iterator for the index&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Corpus-iterator[iterator]
end() const noexcept = 0;
----

== Return Value

the end iterator for the index&period;

Return true if an Symbol with the specified symbol ID exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
exists(link:#mrdocs-SymbolID[SymbolID] const& id) const noexcept;
----

== Description

This function uses the link:#mrdocs-Corpus-find[`find`] function to locate the Symbol with the specified symbol ID and returns true if it exists, otherwise false&period;

== Return Value

true if an Symbol with the specified symbol ID exists&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *id*
| A unique identifier for a symbol&period;
|===

Return the Symbol with the matching ID, or nullptr&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Symbol[Symbol] const*
find(link:#mrdocs-SymbolID[SymbolID] const& id) const noexcept = 0;
----

== Return Value

the Symbol with the matching ID, or nullptr&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *id*
| A unique identifier for a symbol&period;
|===

Return the Symbol with the specified symbol ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T = link:#mrdocs-Symbol[Symbol]&gt;
requires std&colon;&colon;derived&lowbar;from&lt;T, Symbol&gt;
T const&
get(link:#mrdocs-SymbolID[SymbolID] const& id) const noexcept;
----

== Description

This function uses the link:#mrdocs-Corpus-find[`find`] function to locate the Symbol with the specified symbol ID&period; The result is converted to the specified type T and returned&period;

The function link:#mrdocs-Corpus-exists[`exists`] can be used to determine if an Symbol with the specified symbol ID exists&period; If the id does not exist, the behavior is undefined&period;

If the Symbol is not of type T, the behavior is undefined&period;

== Return Value

the Symbol with the specified symbol ID&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *id*
| A unique identifier for a symbol&period;
|===

Return the metadata for the global namespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-NamespaceSymbol[NamespaceSymbol] const&
globalNamespace() const noexcept;
----

== Description

This function is equivalent to calling link:#mrdocs-Corpus-get[`get`] with the symbol ID for the global namespace&period;

== Return Value

the metadata for the global namespace&period;

`lookup` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

Return the Symbol for the matching string in the global context&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Symbol const&&gt;]
link:#mrdocs-Corpus-lookup-0d[lookup](std::string&lowbar;view name) const;
----

[.small]#link:#mrdocs-Corpus-lookup-0d[_» more&period;&period;&period;_]#

Return the Symbol for the matching string in a given context&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;Symbol const&&gt;]
link:#mrdocs-Corpus-lookup-08[lookup](
    link:#mrdocs-SymbolID[SymbolID] const& context,
    std::string&lowbar;view name) const = 0;
----

[.small]#link:#mrdocs-Corpus-lookup-08[_» more&period;&period;&period;_]#

== Return Value

* The Symbol for the symbol with the specified name in the global context, or an error if not found&period;
* The Symbol for the symbol with the specified name in the specified context, or an error if not found&period; If multiple symbols match, one is returned arbitrarily&period; Use link:#mrdocs-Corpus-traverse-02[`traverse`] to find all matching symbols&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The name of the symbol to look up&period;
| *context*
| The context to look up the symbol in&period;
|===

Return the Symbol for the matching string in the global context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;Symbol const&&gt;]
lookup(std::string&lowbar;view name) const;
----

== Return Value

The Symbol for the symbol with the specified name in the global context, or an error if not found&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The name of the symbol to look up&period;
|===

Return the Symbol for the matching string in a given context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;Symbol const&&gt;]
lookup(
    link:#mrdocs-SymbolID[SymbolID] const& context,
    std::string&lowbar;view name) const = 0;
----

== Return Value

The Symbol for the symbol with the specified name in the specified context, or an error if not found&period; If multiple symbols match, one is returned arbitrarily&period; Use link:#mrdocs-Corpus-traverse-02[`traverse`] to find all matching symbols&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *context*
| The context to look up the symbol in&period;
| *name*
| The name of the symbol to look up&period;
|===

`qualifiedName` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

Return the fully qualified name of `I`&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-Corpus-qualifiedName-0b2[qualifiedName](link:#mrdocs-Symbol[Symbol] const& I) const;
----

[.small]#link:#mrdocs-Corpus-qualifiedName-0b2[_» more&period;&period;&period;_]#

Populate `temp` with the fully qualified name of `I`&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
link:#mrdocs-Corpus-qualifiedName-07a[qualifiedName](
    link:#mrdocs-Symbol[Symbol] const& I,
    std::string& temp) const = 0;
----

[.small]#link:#mrdocs-Corpus-qualifiedName-07a[_» more&period;&period;&period;_]#

Return the qualified name of `I` relative to `context`&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-Corpus-qualifiedName-09[qualifiedName](
    link:#mrdocs-Symbol[Symbol] const& I,
    link:#mrdocs-SymbolID[SymbolID] const& context) const;
----

[.small]#link:#mrdocs-Corpus-qualifiedName-09[_» more&period;&period;&period;_]#

Populate `result` with a qualified name relative to `context`&period; If `context` contains `I`, the name is relative&semi; otherwise it is computed from the global namespace&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
link:#mrdocs-Corpus-qualifiedName-075[qualifiedName](
    link:#mrdocs-Symbol[Symbol] const& I,
    link:#mrdocs-SymbolID[SymbolID] const& context,
    std::string& result) const = 0;
----

[.small]#link:#mrdocs-Corpus-qualifiedName-075[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| The Symbol to get the qualified name for&period;
| *temp*
| The string to store the result in&period;
| *context*
| The context used to qualify the name&period;
| *result*
| Output string receiving the name&period;
|===

Return the fully qualified name of `I`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
qualifiedName(link:#mrdocs-Symbol[Symbol] const& I) const;
----

== Return Value

the fully qualified name of `I`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Base class with common properties of all symbols
|===

Populate `temp` with the fully qualified name of `I`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
qualifiedName(
    link:#mrdocs-Symbol[Symbol] const& I,
    std::string& temp) const = 0;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| The Symbol to get the qualified name for&period;
| *temp*
| The string to store the result in&period;
|===

Return the qualified name of `I` relative to `context`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
qualifiedName(
    link:#mrdocs-Symbol[Symbol] const& I,
    link:#mrdocs-SymbolID[SymbolID] const& context) const;
----

== Return Value

the qualified name of `I` relative to `context`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Base class with common properties of all symbols
| *context*
| A unique identifier for a symbol&period;
|===

Populate `result` with a qualified name relative to `context`&period; If `context` contains `I`, the name is relative&semi; otherwise it is computed from the global namespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void
qualifiedName(
    link:#mrdocs-Symbol[Symbol] const& I,
    link:#mrdocs-SymbolID[SymbolID] const& context,
    std::string& result) const = 0;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| The Symbol to name&period;
| *context*
| The context used to qualify the name&period;
| *result*
| Output string receiving the name&period;
|===

Visit the members of specified Symbol&period;

== Synopses

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

Visit the members of specified Symbol&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Symbol&gt; T,
    class F,
    class&period;&period;&period; Args&gt;
void
link:#mrdocs-Corpus-traverse-05[traverse](
    T const& I,
    F&& f,
    Args&&&period;&period;&period; args) const;
----

[.small]#link:#mrdocs-Corpus-traverse-05[_» more&period;&period;&period;_]#

Visit the members of specified Symbol&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Symbol&gt; T,
    class F,
    class&period;&period;&period; Args&gt;
void
link:#mrdocs-Corpus-traverse-07[traverse](
    link:#mrdocs-Corpus-TraverseOptions[TraverseOptions] const& opts,
    T const& I,
    F&& f,
    Args&&&period;&period;&period; args) const;
----

[.small]#link:#mrdocs-Corpus-traverse-07[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| The Symbol to visit&period;
| *f*
| The function to invoke&period;
| *args*
| The arguments to pass to the function&period;
| *opts*
| The options to traverse&period;
|===

Visit the members of specified Symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Symbol&gt; T,
    class F,
    class&period;&period;&period; Args&gt;
void
traverse(
    T const& I,
    F&& f,
    Args&&&period;&period;&period; args) const;
----

== Description

This function invokes the specified function `f` for each member of the specified Symbol `I`&period;

For each member of `I`, the function will invoke the function object `fn` with a type derived from `Symbol` as the first argument, followed by `args&period;&period;&period;`&period;

The type of the first argument is determined by the `SymbolKind` of the `Symbol` object&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| The Symbol to visit&period;
| *f*
| The function to invoke&period;
| *args*
| The arguments to pass to the function&period;
|===

Visit the members of specified Symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Symbol&gt; T,
    class F,
    class&period;&period;&period; Args&gt;
void
traverse(
    link:#mrdocs-Corpus-TraverseOptions[TraverseOptions] const& opts,
    T const& I,
    F&& f,
    Args&&&period;&period;&period; args) const;
----

== Description

This function invokes the specified function `f` for each member of the specified Symbol `I`&period;

For each member of `I`, the function will invoke the function object `fn` with a type derived from `Symbol` as the first argument, followed by `args&period;&period;&period;`&period;

The type of the first argument is determined by the `SymbolKind` of the `Symbol` object&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *opts*
| The options to traverse&period;
| *I*
| The Symbol to visit&period;
| *f*
| The function to invoke&period;
| *args*
| The arguments to pass to the function&period;
|===

Visit the specified Symbol IDs

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mrdocs-range_of[range&lowbar;of&lt;SymbolID&gt;] R,
    class F,
    class&period;&period;&period; Args&gt;
void
visitIDs(
    R&& range,
    F&& f,
    Args&&&period;&period;&period; args) const;
----

== Description

This function invokes the specified function `f` for each member of the specified range of Symbol IDs&period;

For each member of `I` associated with the ID in `range`, the function will invoke the function object `fn` with a type derived from `Symbol` as the first argument, followed by `args&period;&period;&period;`&period;

The type of the first argument is determined by the `SymbolKind` of the `Symbol` object&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| A range of SymbolID objects&period;
| *f*
| The function to invoke&period;
| *args*
| The arguments to pass to the function&period;
|===

The configuration used to generate this corpus&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Config[Config] const& config;
----

Create a corpus using the provided configuration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Corpus(link:#mrdocs-Config[Config] const& config&lowbar;) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *config&lowbar;*
| The object to copy construct from
|===

`decltype(expr)` type wrapper&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;DecltypeType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct DecltypeType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Decltype&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Decltype&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-DecltypeType-isArray[`isArray`] 
| link:#mrdocs-DecltypeType-isAuto[`isAuto`] 
| link:#mrdocs-DecltypeType-isDecltype[`isDecltype`] 
| link:#mrdocs-DecltypeType-isFunction[`isFunction`] 
| link:#mrdocs-DecltypeType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-DecltypeType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-DecltypeType-isNamed[`isNamed`] 
| link:#mrdocs-DecltypeType-isPointer[`isPointer`] 
| link:#mrdocs-DecltypeType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-DecltypeType-Operand[`Operand`] 
| Operand expression for decltype&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-DecltypeType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

Operand expression for decltype&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;DecltypeType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo] Operand;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

A processed documentation comment attached to a declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct DocComment;
----

== Description

A complete documentation comment document consists of a sequence of text blocks&period; Blocks are the top&hyphen;level structural units that might contain other blocks or inline elements&period; These are analogous to markdown blocks&period;

Inline elements (text, emphasis, links, code spans, etc&period;) live inside certain block types, like paragraphs or headings&period; Inlines can contain other inlines (e&period;g&period;, emphasis contains text, link contains text), but they cannot directly contain blocks&period;

Some blocks contain metadata about the symbol being documented, such as parameters and return values&period; These blocks are parsed as usual, but are stored separately in the DocComment structure&period;

Each block in the document might contain&colon;

* No other blocks (leaf blocks)
* Other blocks (container blocks&colon; e&period;g&period; lists)

When they contain no other blocks, they might be&colon;

* Inlines only (e&period;g&period; paragraphs)
* No inlines (e&period;g&period; horizontal rule)

Inline content elements contain other inlines but cannot contain blocks&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-DocComment-2constructor-07[`DocComment`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-DocComment-append[`append`] 
| Append blocks from another DocComment to this&period;
| link:#mrdocs-DocComment-empty[`empty`] 
| Return true if this is empty
| link:#mrdocs-DocComment-operator_eq[`operator&equals;&equals;`] 
| Equality compares all stored blocks&period;
| link:#mrdocs-DocComment-operator_not_eq[`operator!&equals;`] 
| Inequality is the negation of equality&period;
| link:#mrdocs-DocComment-operator_3way[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison on the rendered block sequence&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-DocComment-Document[`Document`] 
| The list of text blocks&period;
| link:#mrdocs-DocComment-IsFunctionObject[`IsFunctionObject`] 
| True if the
| link:#mrdocs-DocComment-brief[`brief`] 
| A brief description of the symbol&period;
| link:#mrdocs-DocComment-exceptions[`exceptions`] 
| The list of exceptions&period;
| link:#mrdocs-DocComment-params[`params`] 
| The list of parameters&period;
| link:#mrdocs-DocComment-postconditions[`postconditions`] 
| The list of postconditions&period;
| link:#mrdocs-DocComment-preconditions[`preconditions`] 
| The list of preconditions&period;
| link:#mrdocs-DocComment-related[`related`] 
| The list of &quot;related&quot; references&period;
| link:#mrdocs-DocComment-relates[`relates`] 
| The list of &quot;relates&quot; references&period;
| link:#mrdocs-DocComment-returns[`returns`] 
| The list of return type descriptions&period;
| link:#mrdocs-DocComment-sees[`sees`] 
| The list of &quot;see also&quot; references&period;
| link:#mrdocs-DocComment-tparams[`tparams`] 
| The list of template parameters&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-merge-0b[`merge`]
| Append blocks from `other` into `I`, preserving order&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-DocComment-2constructor-0a[DocComment]() noexcept;
----

[.small]#link:#mrdocs-DocComment-2constructor-0a[_» more&period;&period;&period;_]#

Constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-DocComment-2constructor-01[DocComment](std::vector&lt;Polymorphic&lt;doc::Block&gt;&gt; blocks);
----

[.small]#link:#mrdocs-DocComment-2constructor-01[_» more&period;&period;&period;_]#

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
DocComment() noexcept;
----

Constructor

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
DocComment(std::vector&lt;Polymorphic&lt;doc::Block&gt;&gt; blocks);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *blocks*
| The object to construct from
|===

Append blocks from another DocComment to this&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
append(link:#mrdocs-DocComment[DocComment]&& other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| A processed documentation comment attached to a declaration&period;
|===

Return true if this is empty

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
empty() const noexcept;
----

== Return Value

true if this is empty

Equality compares all stored blocks&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(link:#mrdocs-DocComment[DocComment] const& rhs) const noexcept = default;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

Inequality is the negation of equality&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator!&equals;(link:#mrdocs-DocComment[DocComment] const& rhs) const noexcept;
----

== Return Value

`true` if the objects are not equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

Three&hyphen;way comparison on the rendered block sequence&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(link:#mrdocs-DocComment[DocComment] const& other) const noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

The list of text blocks&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Polymorphic&lt;doc::Block&gt;&gt; Document;
----

True if the

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsFunctionObject = false;
----

== Description

(or

) command was used on this symbol&period;

A brief description of the symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;doc::BriefBlock&gt;] brief;
----

The list of exceptions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::ThrowsBlock&gt; exceptions;
----

The list of parameters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::ParamBlock&gt; params;
----

The list of postconditions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::PostconditionBlock&gt; postconditions;
----

The list of preconditions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::PreconditionBlock&gt; preconditions;
----

The list of &quot;related&quot; references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::ReferenceInline&gt; related;
----

== Description

These references are the inverse of the relates command&period;

They are calculated automatically by MrDocs and are rendered as Non&hyphen;Member Functions&period;

The list of &quot;relates&quot; references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::ReferenceInline&gt; relates;
----

== Description

These references are created with the relates command&period;

The list of return type descriptions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::ReturnsBlock&gt; returns;
----

== Description

Multiple return descriptions are allowed&period;

The results are concatenated in the order they appear in the source code&period;

The list of &quot;see also&quot; references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::SeeBlock&gt; sees;
----

The list of template parameters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;doc::TParamBlock&gt; tparams;
----

Front&hyphen;end factory for producing Dom nodes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class DomCorpus;
----

== Description

This class keeps a reference to the link:#mrdocs-Corpus[`Corpus`] of extracted metadata, and provides a mechanism for constructing DOM nodes representing the metadata&period;

A link:#mrdocs-Generator[`Generator`] can subclass this object then uses it to create the Dom nodes used as input for rendering template engines&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-DomCorpus-2constructor[`DomCorpus`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-DomCorpus-2destructor[`&#126;DomCorpus`] [.small]#[destructor]# [.small]#[virtual]#
| Destructor&period;
| link:#mrdocs-DomCorpus-construct[`construct`]  [.small]#[virtual]#
| Construct a lazy Dom object representing the specified symbol&period;
| link:#mrdocs-DomCorpus-get[`get`] 
| Return a Dom object representing the given symbol&period;
| link:#mrdocs-DomCorpus-getCorpus[`getCorpus`] 
| Returns the Corpus associated with the Dom&period;
| link:#mrdocs-DomCorpus-getDocComment[`getDocComment`]  [.small]#[virtual]#
| Return a Dom value representing the DocComment&period;
| link:#mrdocs-DomCorpus-operator_star[`operator&ast;`] 
| Returns the Corpus associated with the Dom&period;
| link:#mrdocs-DomCorpus-operator_ptr[`operator&hyphen;&gt;`] 
| Returns the Corpus associated with the Dom&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-getParents-06[`getParents`]
| Return a list of the parent symbols of the specified Info&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
DomCorpus(link:#mrdocs-Corpus[Corpus] const& corpus);
----

== Description

Ownership of the specified Corpus is not transferred&semi; the caller is responsible for ensuring the lifetime extension of the object&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *corpus*
| The Corpus whose metadata to use&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;DomCorpus();
----

Construct a lazy Dom object representing the specified symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-Object[dom::Object]
construct(link:#mrdocs-Symbol[Symbol] const& I) const;
----

== Description

This function is called internally when a `dom&colon;&colon;Object` representing a symbol needs to be constructed because it was not found in the cache&period;

== Return Value

A container of key and value pairs&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Base class with common properties of all symbols
|===

Return a Dom object representing the given symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
get(link:#mrdocs-SymbolID[SymbolID] const& id) const;
----

== Return Value

A value containing the symbol contents, or null if `id` is invalid&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *id*
| The id of the symbol to return&period;
|===

Returns the Corpus associated with the Dom&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus[Corpus] const&
getCorpus() const;
----

== Return Value

the Corpus associated with the Dom&period;

Return a Dom value representing the DocComment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-dom-Value[dom::Value]
getDocComment(link:#mrdocs-DocComment[DocComment] const& jd) const;
----

== Description

The default implementation returns null&period; A link:#mrdocs-Generator[`Generator`] should override this member and return a value that has suitable strings in the generator&apos;s output format&period;

== Return Value

a Dom value representing the DocComment&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *jd*
| A processed documentation comment attached to a declaration&period;
|===

Returns the Corpus associated with the Dom&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus[Corpus] const&
operator&ast;() const;
----

== Return Value

the Corpus associated with the Dom&period;

Returns the Corpus associated with the Dom&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Corpus[Corpus] const*
operator&hyphen;&gt;() const;
----

== Return Value

the Corpus associated with the Dom&period;

Info for enum constants&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;EnumConstant&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct EnumConstantSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;EnumConstant&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;EnumConstant&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-EnumConstantSymbol-2constructor[`EnumConstantSymbol`]         [.small]#[constructor]#
| Construct an enum constant with its ID&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-EnumConstantSymbol-isConcept[`isConcept`] 
| link:#mrdocs-EnumConstantSymbol-isEnum[`isEnum`] 
| link:#mrdocs-EnumConstantSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-EnumConstantSymbol-isFunction[`isFunction`] 
| link:#mrdocs-EnumConstantSymbol-isGuide[`isGuide`] 
| link:#mrdocs-EnumConstantSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-EnumConstantSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-EnumConstantSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-EnumConstantSymbol-isRecord[`isRecord`] 
| link:#mrdocs-EnumConstantSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-EnumConstantSymbol-isUsing[`isUsing`] 
| link:#mrdocs-EnumConstantSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-EnumConstantSymbol-Initializer[`Initializer`] 
| The initializer expression, if any
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-EnumConstantSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Construct an enum constant with its ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;EnumConstant&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
EnumConstantSymbol(link:#mrdocs-SymbolID[SymbolID] ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to construct from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

The initializer expression, if any

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;EnumConstant&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ConstantExprInfo[ConstantExprInfo&lt;uint64&lowbar;t&gt;] Initializer;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

Metadata for an enumeration declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Enum&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct EnumSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Enum&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Enum&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-EnumSymbol-2constructor[`EnumSymbol`]         [.small]#[constructor]#
| Construct an enum symbol with its ID&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-EnumSymbol-isConcept[`isConcept`] 
| link:#mrdocs-EnumSymbol-isEnum[`isEnum`] 
| link:#mrdocs-EnumSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-EnumSymbol-isFunction[`isFunction`] 
| link:#mrdocs-EnumSymbol-isGuide[`isGuide`] 
| link:#mrdocs-EnumSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-EnumSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-EnumSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-EnumSymbol-isRecord[`isRecord`] 
| link:#mrdocs-EnumSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-EnumSymbol-isUsing[`isUsing`] 
| link:#mrdocs-EnumSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-EnumSymbol-Constants[`Constants`] 
| The members of this scope&period;
| link:#mrdocs-EnumSymbol-Scoped[`Scoped`] 
| Indicates whether this enum is scoped (e&period;g&period; enum class)&period;
| link:#mrdocs-EnumSymbol-UnderlyingType[`UnderlyingType`] 
| The underlying type of this enum, if explicitly specified&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-EnumSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-allMembers-06[`allMembers`]
| Return the list of enum constants for this symbol&period;
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Construct an enum symbol with its ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Enum&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
EnumSymbol(link:#mrdocs-SymbolID[SymbolID] ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to construct from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

The members of this scope&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Enum&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Constants;
----

== Description

All members are enum constants&period;

Enum constants are independent symbol types that can be documented separately&period;

Indicates whether this enum is scoped (e&period;g&period; enum class)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Enum&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool Scoped = false;
----

== Description

If true, the enumerators are accessed with the scope resolution operator (e&period;g&period; EnumName&colon;&colon;Enumerator)&period;

If false, the enumerators are accessed directly (e&period;g&period; Enumerator) in the parent context&period;

The underlying type of this enum, if explicitly specified&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Enum&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Type&gt;&gt;] UnderlyingType = std&colon;&colon;nullopt;
----

== Description

If not specified, the underlying type is an implementation&hyphen;defined integral type that can represent all the enumerator values defined in the enumeration&period;

For `enum Foo &colon; short &lcub; &period;&period;&period; &rcub;&semi;` this will be represent `short`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

Holds the description of an error, or success&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Error final
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Error-2constructor-00[`Error`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-Error-operator_assign-0e[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-Error-Throw-0a[`Throw`] 
| `Throw` overloads
| link:#mrdocs-Error-failed[`failed`] 
| Return true if this holds an error&period;
| link:#mrdocs-Error-location[`location`] 
| Return the source location&period;
| link:#mrdocs-Error-message[`message`] 
| Return the error string&period;
| link:#mrdocs-Error-reason[`reason`] 
| Return the reason string&period;
| link:#mrdocs-Error-swap[`swap`] 
| Swap the contents with another error&period;
| link:#mrdocs-Error-where[`where`] 
| Return the location string&period;
| link:#mrdocs-Error-2conversion[`operator bool`] 
| Return true if this holds an error&period;
| link:#mrdocs-Error-operator_eq[`operator&equals;&equals;`] 
| Return true if this equals rhs&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-swap-0e[mrdocs::swap]`
| 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-formatError[`formatError`]
| Return a formatted error&period;
|===

Constructor&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Error-2constructor-07b[Error]() noexcept = default;
----

[.small]#link:#mrdocs-Error-2constructor-07b[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Error-2constructor-01[Error](link:#mrdocs-Error[Error] const& other) = default;
----

[.small]#link:#mrdocs-Error-2constructor-01[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Error-2constructor-08[Error](link:#mrdocs-Error[Error]&& other) noexcept = default;
----

[.small]#link:#mrdocs-Error-2constructor-08[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-Error-2constructor-0e[Error](std::exception const& ex);
----

[.small]#link:#mrdocs-Error-2constructor-0e[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-Error-2constructor-0d[Error](
    std::string reason,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

[.small]#link:#mrdocs-Error-2constructor-0d[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-Error-2constructor-072[Error](
    std::error&lowbar;code const& ec,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

[.small]#link:#mrdocs-Error-2constructor-072[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Error-2constructor-0b[Error](
    std::vector&lt;Error&gt; const& errors,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

[.small]#link:#mrdocs-Error-2constructor-0b[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *reason*
| A string indicating the cause of the failure&period; This must not be empty&period;
| *loc*
| The source location where the error occurred&period;
| *ec*
| The error code&period;
| *errors*
| The list of errors to combine&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Error() noexcept = default;
----

== Description

A default&hyphen;constructed error is equivalent to success&period;

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Error(link:#mrdocs-Error[Error] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Error(link:#mrdocs-Error[Error]&& other) noexcept = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Error(std::exception const& ex);
----

== Description

The constructed object will always indicate a failure, even if the message in the exception is empty&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ex*
| The object to copy construct from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Error(
    std::string reason,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *reason*
| A string indicating the cause of the failure&period; This must not be empty&period;
| *loc*
| The source location where the error occurred&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Error(
    std::error&lowbar;code const& ec,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ec*
| The error code&period;
| *loc*
| The source location where the error occurred&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Error(
    std::vector&lt;Error&gt; const& errors,
    std::source&lowbar;location loc = source&lowbar;location&colon;&colon;current());
----

== Description

This constructs a new error from a list of zero or more errors&period; If the list is empty, or if all the errors in the list indicate success, then newly constructed object will indicate success&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *errors*
| The list of errors to combine&period;
| *loc*
| The source location where the error occurred&period;
|===

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

Assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Error[Error]&
link:#mrdocs-Error-operator_assign-05[operator&equals;](link:#mrdocs-Error[Error] const& other) = default;
----

[.small]#link:#mrdocs-Error-operator_assign-05[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Error[Error]&
link:#mrdocs-Error-operator_assign-0b[operator&equals;](link:#mrdocs-Error[Error]&& other) noexcept = default;
----

[.small]#link:#mrdocs-Error-operator_assign-0b[_» more&period;&period;&period;_]#

Assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Error[Error]&
operator&equals;(link:#mrdocs-Error[Error] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Error[Error]&
operator&equals;(link:#mrdocs-Error[Error]&& other) noexcept = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

`Throw` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

Throw Exception(&ast;this)


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;noreturn&rsqb;&rsqb;
void
link:#mrdocs-Error-Throw-04[Throw]() const &amp;;
----

[.small]#link:#mrdocs-Error-Throw-04[_» more&period;&period;&period;_]#

Throw Exception(std&colon;&colon;move(&ast;this))


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;noreturn&rsqb;&rsqb;
void
link:#mrdocs-Error-Throw-03[Throw]() &amp;&amp;;
----

[.small]#link:#mrdocs-Error-Throw-03[_» more&period;&period;&period;_]#

== Preconditions

* this&hyphen;&gt;failed()

Throw Exception(&ast;this)

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;noreturn&rsqb;&rsqb;
void
Throw() const &amp;;
----

== Preconditions

* this&hyphen;&gt;failed()

Throw Exception(std&colon;&colon;move(&ast;this))

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;noreturn&rsqb;&rsqb;
void
Throw() &amp;&amp;;
----

== Preconditions

* this&hyphen;&gt;failed()

Return true if this holds an error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
failed() const noexcept;
----

== Return Value

true if this holds an error&period;

Return the source location&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::source&lowbar;location const&
location() const noexcept;
----

== Return Value

the source location&period;

Return the error string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string const&
message() const noexcept;
----

== Return Value

the error string&period;

Return the reason string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string const&
reason() const noexcept;
----

== Return Value

the reason string&period;

Swap the contents with another error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(link:#mrdocs-Error[Error]& rhs) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| Holds the description of an error, or success&period;
|===

Return the location string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string const&
where() const noexcept;
----

== Return Value

the location string&period;

Return true if this holds an error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
operator bool() const noexcept;
----

== Return Value

true if this holds an error&period;

Return true if this equals rhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(link:#mrdocs-Error[Error] const& rhs) const noexcept;
----

== Return Value

true if this equals rhs&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

Type of all exceptions thrown by the API&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Exception final
    : public std::exception
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `std::exception`
| Base class for all library exceptions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Exception-2constructor[`Exception`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-Exception-operator_assign-03[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-Exception-error[`error`] 
| Return the Error stored in the exception&period;
| link:#mrdocs-Exception-what[`what`]  [.small]#[virtual]#
| Return a null&hyphen;terminated error string&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Exception(link:#mrdocs-Error[Error] err) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *err*
| The object to construct from
|===

Assignment operators

== Synopses

Declared in `&lt;bits&sol;exception&period;h&gt;`

Assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
exception&
link:#mrdocs-Exception-operator_assign-0e[operator&equals;](exception const& value) = default;
----

[.small]#link:#mrdocs-Exception-operator_assign-0e[_» more&period;&period;&period;_]#

Assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
exception&
link:#mrdocs-Exception-operator_assign-09[operator&equals;](exception&& value) = default;
----

[.small]#link:#mrdocs-Exception-operator_assign-09[_» more&period;&period;&period;_]#

Assignment operator

== Synopsis

Declared in `&lt;bits&sol;exception&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
exception&
operator&equals;(exception const& value) = default;
----

== Return Value

Base class for all library exceptions&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to copy assign from
|===

Assignment operator

== Synopsis

Declared in `&lt;bits&sol;exception&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
exception&
operator&equals;(exception&& value) = default;
----

== Return Value

Base class for all library exceptions&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to move assign from
|===

Return the Error stored in the exception&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Error[Error] const&
error() const noexcept;
----

== Return Value

the Error stored in the exception&period;

Return a null&hyphen;terminated error string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
what() const noexcept override;
----

== Return Value

a null&hyphen;terminated error string&period;

A set of execution agents for performing concurrent work&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Agent&gt;
class ExecutorGroup
    : public link:#mrdocs-ExecutorGroupBase[ExecutorGroupBase]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-ExecutorGroupBase[ExecutorGroupBase]`
| Base class that owns a pool of execution agents and a shared work queue&period;
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-arg_t[`arg&lowbar;t`] 
| Argument wrapper propagated from ThreadPool&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroup-2constructor[`ExecutorGroup`]         [.small]#[constructor]#
| Construct a new executor group bound to a thread pool&period;
| link:#mrdocs-ExecutorGroup-async[`async`] 
| Submit work to be executed&period;
| link:#mrdocs-ExecutorGroup-emplace[`emplace`] 
| Construct a new agent in the group&period;
| link:#mrdocs-ExecutorGroupBase-wait[`wait`] 
| Block until all work has completed&period;
|===

== Protected Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-AnyAgent[`AnyAgent`] 
| Type&hyphen;erased agent holder used by the base class&period;
| link:#mrdocs-ExecutorGroupBase-Impl[`Impl`] 
| Opaque implementation shared by all ExecutorGroup instantiations&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-post[`post`] 
| Queue work to run on the group agents&period;
| link:#mrdocs-ExecutorGroupBase-run[`run`] 
| Execute queued work until empty&period;
|===

== Protected Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-agents_[`agents&lowbar;`] 
| Agents owned by the group&period;
| link:#mrdocs-ExecutorGroupBase-impl_[`impl&lowbar;`] 
| Opaque implementation pointer shared by all ExecutorGroup instantiations&period;
| link:#mrdocs-ExecutorGroupBase-work_[`work&lowbar;`] 
| Pending work posted to the group&period;
|===

Construct a new executor group bound to a thread pool&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
ExecutorGroup(link:#mrdocs-ThreadPool[ThreadPool]& threadPool);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *threadPool*
| Pool that owns the worker threads&period;
|===

Submit work to be executed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class F,
    class&period;&period;&period; Args&gt;
void
async(
    F&& f,
    Args&&&period;&period;&period; args);
----

== Description

The function object must have this equivalent signature&colon;

[,cpp]
----
void( Agent&, Args... );
----
== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The function to invoke&period;
| *args*
| Zero or more arguments to forward to the function&period;
|===

Construct a new agent in the group&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
void
emplace(Args&&&period;&period;&period; args);
----

== Description

The behavior is undefined if there is any outstanding work or busy threads&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Zero or more arguments to forward to the agent constructor&period;
|===

Base class that owns a pool of execution agents and a shared work queue&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class ExecutorGroupBase;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-arg_t[`arg&lowbar;t`] 
| Argument wrapper propagated from ThreadPool&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-2constructor-0d[`ExecutorGroupBase`]         [.small]#[constructor]#
| Move&hyphen;construct from another group&period;
| link:#mrdocs-ExecutorGroupBase-2destructor[`&#126;ExecutorGroupBase`] [.small]#[destructor]#
| Destroy the executor group, waiting for outstanding work&period;
| link:#mrdocs-ExecutorGroupBase-wait[`wait`] 
| Block until all work has completed&period;
|===

== Protected Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-AnyAgent[`AnyAgent`] 
| Type&hyphen;erased agent holder used by the base class&period;
| link:#mrdocs-ExecutorGroupBase-Impl[`Impl`] 
| Opaque implementation shared by all ExecutorGroup instantiations&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-2constructor-05[`ExecutorGroupBase`]         [.small]#[constructor]#
| Construct with a backing thread pool&period;
| link:#mrdocs-ExecutorGroupBase-post[`post`] 
| Queue work to run on the group agents&period;
| link:#mrdocs-ExecutorGroupBase-run[`run`] 
| Execute queued work until empty&period;
|===

== Protected Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-agents_[`agents&lowbar;`] 
| Agents owned by the group&period;
| link:#mrdocs-ExecutorGroupBase-impl_[`impl&lowbar;`] 
| Opaque implementation pointer shared by all ExecutorGroup instantiations&period;
| link:#mrdocs-ExecutorGroupBase-work_[`work&lowbar;`] 
| Pending work posted to the group&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-ExecutorGroup[`ExecutorGroup`]
| A set of execution agents for performing concurrent work&period;
|===

Argument wrapper propagated from ThreadPool&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
using arg&lowbar;t = link:#mrdocs-ThreadPool-arg_t[ThreadPool::arg&lowbar;t&lt;T&gt;];
----

Move&hyphen;construct from another group&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
ExecutorGroupBase(link:#mrdocs-ExecutorGroupBase[ExecutorGroupBase]&& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Destroy the executor group, waiting for outstanding work&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;ExecutorGroupBase();
----

Block until all work has completed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::vector&lt;Error&gt;
wait() noexcept;
----

== Return Value

Zero or more errors which were thrown from submitted work&period;

Type&hyphen;erased agent holder used by the base class&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct AnyAgent;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExecutorGroupBase-AnyAgent-2destructor[`&#126;AnyAgent`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor to allow deleting through the base pointer&period;
| link:#mrdocs-ExecutorGroupBase-AnyAgent-get[`get`]  [.small]#[virtual]#
| Return a pointer to the stored agent object&period;
|===

Virtual destructor to allow deleting through the base pointer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;AnyAgent() = 0;
----

Return a pointer to the stored agent object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
void*
get() noexcept = 0;
----

== Return Value

a pointer to the stored agent object&period;

Opaque implementation shared by all ExecutorGroup instantiations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Impl;
----

Construct with a backing thread pool&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
ExecutorGroupBase(link:#mrdocs-ThreadPool[ThreadPool]& value);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to copy construct from
|===

Queue work to run on the group agents&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
post(link:#mrdocs-any_callable-01[any&lowbar;callable&lt;void(void*)&gt;] work);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *work*
| A movable, type&hyphen;erased function object&period;
|===

Execute queued work until empty&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
run(std::unique&lowbar;lock&lt;std::mutex&gt; lock);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lock*
| Held lock protecting the work queue&period;
|===

Agents owned by the group&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::unique&lowbar;ptr&lt;AnyAgent&gt;&gt; agents&lowbar;;
----

Opaque implementation pointer shared by all ExecutorGroup instantiations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::unique&lowbar;ptr&lt;Impl&gt; impl&lowbar;;
----

Pending work posted to the group&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ExecutorGroup&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::deque&lt;any&lowbar;callable&lt;void(void*)&gt;&gt; work&lowbar;;
----

A container holding an error or a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class E = link:#mrdocs-Error[Error]&gt;
class Expected;
----

== Description

Monadic result type holding either a value `T` or an unexpected error `E`&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-0a-error_type[`error&lowbar;type`] 
| Type produced on failure&period;
| link:#mrdocs-Expected-0a-rebind[`rebind`] 
| Rebind to an `Expected` with a different value type and the same error type&period;
| link:#mrdocs-Expected-0a-unexpected_type[`unexpected&lowbar;type`] 
| Convenience alias for an Unexpected containing the error type&period;
| link:#mrdocs-Expected-0a-value_type[`value&lowbar;type`] 
| Type produced on success&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-0a-2constructor-035[`Expected`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-Expected-0a-2destructor-0c[`&#126;Expected`] [.small]#[destructor]#
| Destructors
| link:#mrdocs-Expected-0a-operator_assign-0d[`operator&equals;`]  [.small]#[deleted]#
| Assignment operators
| link:#mrdocs-Expected-0a-and_then-05[`and&lowbar;then`] 
| `and&lowbar;then` overloads
| link:#mrdocs-Expected-0a-emplace-07[`emplace`] 
| `emplace` overloads
| link:#mrdocs-Expected-0a-error-022[`error`] 
| Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;
| link:#mrdocs-Expected-0a-error_or-04[`error&lowbar;or`] 
| `error&lowbar;or` overloads
| link:#mrdocs-Expected-0a-has_value[`has&lowbar;value`] 
| Return true when the Expected contains a value&period;
| link:#mrdocs-Expected-0a-operator_star-06b2[`operator&ast;`] 
| Dereference operators
| link:#mrdocs-Expected-0a-operator_ptr-0c[`operator&hyphen;&gt;`] 
| Access value members through pointer syntax&period;
| link:#mrdocs-Expected-0a-or_else-0d[`or&lowbar;else`] 
| `or&lowbar;else` overloads
| link:#mrdocs-Expected-0a-swap[`swap`] 
| Swap the stored state with another Expected&period;
| link:#mrdocs-Expected-0a-transform-01[`transform`] 
| `transform` overloads
| link:#mrdocs-Expected-0a-transform_error-0e[`transform&lowbar;error`] 
| `transform&lowbar;error` overloads
| link:#mrdocs-Expected-0a-value-04[`value`] 
| `value` overloads
| link:#mrdocs-Expected-0a-value_or-0c[`value&lowbar;or`] 
| `value&lowbar;or` overloads
| link:#mrdocs-Expected-0a-2conversion[`operator bool`] 
| Return true when the Expected contains a value&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-0a-unex_[`unex&lowbar;`] [.small]#[variant member]#
| Storage for the unexpected error&period;
| link:#mrdocs-Expected-0a-val_[`val&lowbar;`] [.small]#[variant member]#
| Storage for the engaged value&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-swap-03[mrdocs::swap]`
| Swap contents with another Expected&period;
| `link:#mrdocs-operator_eq-066[mrdocs::operator&equals;&equals;]`
| Equality operator
| `link:#mrdocs-operator_eq-03[mrdocs::operator&equals;&equals;]`
| Equality operator
| `link:#mrdocs-operator_eq-09[mrdocs::operator&equals;&equals;]`
| Equality operator
| `mrdocs::Expected`
| A container holding an error or a value&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-forEachFile-03[`forEachFile`]
| Call a function for each file in a directory&period;
| link:#mrdocs-forEachFile-09[`forEachFile`]
| Visit each file in a directory&period;
| link:#mrdocs-getSinglePageFullPath[`getSinglePageFullPath`]
| Return the full path for single page output&period;
| link:#mrdocs-installGenerator[`installGenerator`]
| Install a custom generator&period;
| link:#mrdocs-parse-01[`parse`]
| Parse a string view
| link:#mrdocs-files-createDirectory[`files&colon;&colon;createDirectory`]
| Create a directory&period;
| link:#mrdocs-files-getFileText[`files&colon;&colon;getFileText`]
| Return the contents of a file as a string&period;
| link:#mrdocs-files-getFileType[`files&colon;&colon;getFileType`]
| Return the file type or an error
| link:#mrdocs-files-makeAbsolute-03[`files&colon;&colon;makeAbsolute`]
| Return an absolute path from a possibly relative path&period;
| link:#mrdocs-files-requireAbsolute[`files&colon;&colon;requireAbsolute`]
| Return an error if pathName is not absolute&period;
| link:#mrdocs-files-requireDirectory[`files&colon;&colon;requireDirectory`]
| Return an error if the path is not a directory&period;
| link:#mrdocs-js-registerHelper[`js&colon;&colon;registerHelper`]
| Register a JavaScript helper function
|===

Type produced on failure&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using error&lowbar;type = E;
----

Rebind to an `Expected` with a different value type and the same error type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
using rebind = link:#mrdocs-Expected-0a[Expected&lt;U, error&lowbar;type&gt;];
----

Convenience alias for an Unexpected containing the error type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using unexpected&lowbar;type = link:#mrdocs-Unexpected-0c[Unexpected&lt;E&gt;];
----

Type produced on success&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = T;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Construct an engaged Expected with a default&hyphen;initialized value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a-2constructor-0e[Expected]() noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;default&lowbar;constructible&lowbar;v&lt;T&gt;)
requires std&colon;&colon;is&lowbar;default&lowbar;constructible&lowbar;v&lt;T&gt;;
----

[.small]#link:#mrdocs-Expected-0a-2constructor-0e[_» more&period;&period;&period;_]#

Default copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a-2constructor-0a[Expected](link:#mrdocs-Expected-0a[Expected] const& other) = default;
----

[.small]#link:#mrdocs-Expected-0a-2constructor-0a[_» more&period;&period;&period;_]#

Copy&hyphen;construct, handling non&hyphen;trivial alternatives&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a-2constructor-05c[Expected](link:#mrdocs-Expected-0a[Expected] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (!std&colon;&colon;is&lowbar;trivially&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         !std&colon;&colon;is&lowbar;trivially&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-05c[_» more&period;&period;&period;_]#

Construct from another Expected with potentially different types&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U const&amp;&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &amp;&amp;
        (!constructible&lowbar;from&lowbar;expected&lt;U, G&gt;)
constexpr
explicit(explicit&lowbar;conv&lt;const U &amp;, const G &amp;&gt;)
link:#mrdocs-Expected-0a-2constructor-053[Expected](link:#mrdocs-Expected-0a[Expected&lt;U, G&gt;] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-053[_» more&period;&period;&period;_]#

Default move constructor&period; Default move constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a-2constructor-038[Expected](link:#mrdocs-Expected-0a[Expected]&& other) = default;
----

[.small]#link:#mrdocs-Expected-0a-2constructor-038[_» more&period;&period;&period;_]#

Move&hyphen;construct, handling non&hyphen;trivial alternatives&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a-2constructor-06[Expected](link:#mrdocs-Expected-0a[Expected]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (!std&colon;&colon;is&lowbar;trivially&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         !std&colon;&colon;is&lowbar;trivially&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-06[_» more&period;&period;&period;_]#

Move&hyphen;construct from another Expected with potentially different types&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp;
        (!constructible&lowbar;from&lowbar;expected&lt;U, G&gt;)
constexpr
explicit(explicit&lowbar;conv&lt;U, G&gt;)
link:#mrdocs-Expected-0a-2constructor-091[Expected](link:#mrdocs-Expected-0a[Expected&lt;U, G&gt;]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-091[_» more&period;&period;&period;_]#

Construct a disengaged Expected from an unexpected error (copy)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const G &amp;, E&gt;)
link:#mrdocs-Expected-0a-2constructor-052[Expected](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-052[_» more&period;&period;&period;_]#

Construct an engaged Expected from a convertible value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U = T&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, Expected&gt;) &amp;&amp;
        (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt;) &amp;&amp;
        (!detail&colon;&colon;isUnexpected&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;) &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T&gt;)
link:#mrdocs-Expected-0a-2constructor-0b[Expected](U&& v) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-0b[_» more&period;&period;&period;_]#

Construct a disengaged Expected from an unexpected error (move)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;G, E&gt;)
link:#mrdocs-Expected-0a-2constructor-00[Expected](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-00[_» more&period;&period;&period;_]#

Construct an engaged Expected in&hyphen;place&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Expected-0a-2constructor-0f[Expected](
    std::in&lowbar;place&lowbar;t,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-0f[_» more&period;&period;&period;_]#

Construct a disengaged Expected holding an error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Expected-0a-2constructor-07[Expected](
    link:#mrdocs-unexpect_t[unexpect&lowbar;t],
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-07[_» more&period;&period;&period;_]#

Construct an engaged Expected from an initializer list&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Expected-0a-2constructor-099[Expected](
    std::in&lowbar;place&lowbar;t,
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-099[_» more&period;&period;&period;_]#

Construct a disengaged Expected from an initializer list&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Expected-0a-2constructor-01[Expected](
    link:#mrdocs-unexpect_t[unexpect&lowbar;t],
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2constructor-01[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the value constructor&period;
| *il*
| Initializer list forwarded to the value constructor&period;
|===

Construct an engaged Expected with a default&hyphen;initialized value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected() noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;default&lowbar;constructible&lowbar;v&lt;T&gt;)
requires std&colon;&colon;is&lowbar;default&lowbar;constructible&lowbar;v&lt;T&gt;;
----

Default copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Expected(link:#mrdocs-Expected-0a[Expected] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Copy&hyphen;construct, handling non&hyphen;trivial alternatives&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected(link:#mrdocs-Expected-0a[Expected] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (!std&colon;&colon;is&lowbar;trivially&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         !std&colon;&colon;is&lowbar;trivially&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Description

Copy&hyphen;construct from another void Expected&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to copy construct from
|===

Construct from another Expected with potentially different types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U const&amp;&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &amp;&amp;
        (!constructible&lowbar;from&lowbar;expected&lt;U, G&gt;)
constexpr
explicit(explicit&lowbar;conv&lt;const U &amp;, const G &amp;&gt;)
Expected(link:#mrdocs-Expected-0a[Expected&lt;U, G&gt;] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to copy construct from
|===

Default move constructor&period; Default move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Expected(link:#mrdocs-Expected-0a[Expected]&& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Move&hyphen;construct, handling non&hyphen;trivial alternatives&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected(link:#mrdocs-Expected-0a[Expected]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (!std&colon;&colon;is&lowbar;trivially&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         !std&colon;&colon;is&lowbar;trivially&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Description

Move&hyphen;construct from another void Expected&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to move construct from
|===

Move&hyphen;construct from another Expected with potentially different types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp;
        (!constructible&lowbar;from&lowbar;expected&lt;U, G&gt;)
constexpr
explicit(explicit&lowbar;conv&lt;U, G&gt;)
Expected(link:#mrdocs-Expected-0a[Expected&lt;U, G&gt;]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to move construct from
|===

Construct a disengaged Expected from an unexpected error (copy)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const G &amp;, E&gt;)
Expected(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The object to copy construct from
|===

Construct an engaged Expected from a convertible value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U = T&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, Expected&gt;) &amp;&amp;
        (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt;) &amp;&amp;
        (!detail&colon;&colon;isUnexpected&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;) &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T&gt;)
Expected(U&& v) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The object to move construct from
|===

Construct a disengaged Expected from an unexpected error (move)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;G, E&gt;)
Expected(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The object to move construct from
|===

Construct an engaged Expected in&hyphen;place&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;
constexpr
explicit
Expected(
    std::in&lowbar;place&lowbar;t,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the value constructor&period;
|===

Construct a disengaged Expected holding an error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;
constexpr
explicit
Expected(
    link:#mrdocs-unexpect_t[unexpect&lowbar;t],
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the error constructor&period;
|===

Construct an engaged Expected from an initializer list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
Expected(
    std::in&lowbar;place&lowbar;t,
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *il*
| Initializer list forwarded to the value constructor&period;
| *args*
| Additional arguments forwarded to the value constructor&period;
|===

Construct a disengaged Expected from an initializer list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
Expected(
    link:#mrdocs-unexpect_t[unexpect&lowbar;t],
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *il*
| Initializer list forwarded to the error constructor&period;
| *args*
| Additional arguments forwarded to the error constructor&period;
|===

Destructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Defaulted trivial destructor when both alternatives are trivial&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a-2destructor-04[&#126;Expected]() = default;
----

[.small]#link:#mrdocs-Expected-0a-2destructor-04[_» more&period;&period;&period;_]#

Destroy the active alternative when a non&hyphen;trivial destructor is required&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a-2destructor-0e[&#126;Expected]()
requires (!std&colon;&colon;is&lowbar;trivially&lowbar;destructible&lowbar;v&lt;T&gt;)
        &verbar;&verbar; (!std&colon;&colon;is&lowbar;trivially&lowbar;destructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-0a-2destructor-0e[_» more&period;&period;&period;_]#

Defaulted trivial destructor when both alternatives are trivial&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
&#126;Expected() = default;
----

Destroy the active alternative when a non&hyphen;trivial destructor is required&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
&#126;Expected()
requires (!std&colon;&colon;is&lowbar;trivially&lowbar;destructible&lowbar;v&lt;T&gt;)
        &verbar;&verbar; (!std&colon;&colon;is&lowbar;trivially&lowbar;destructible&lowbar;v&lt;E&gt;);
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Copy&hyphen;assign from another Expected&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected]&
link:#mrdocs-Expected-0a-operator_assign-0f[operator&equals;](link:#mrdocs-Expected-0a[Expected] const& other) = delete;
----

[.small]#link:#mrdocs-Expected-0a-operator_assign-0f[_» more&period;&period;&period;_]#

Assign from another Expected with compatible value&sol;error types&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a[Expected]&
link:#mrdocs-Expected-0a-operator_assign-09[operator&equals;](link:#mrdocs-Expected-0a[Expected] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;assignable&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;assignable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;copy&lowbar;assignable&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;assignable&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-0a-operator_assign-09[_» more&period;&period;&period;_]#

Move&hyphen;assign from another Expected with compatible value&sol;error types&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a[Expected]&
link:#mrdocs-Expected-0a-operator_assign-0e[operator&equals;](link:#mrdocs-Expected-0a[Expected]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;assignable&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;assignable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;move&lowbar;assignable&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;assignable&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-0a-operator_assign-0e[_» more&period;&period;&period;_]#

Assign a new unexpected error from lvalue&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G const&amp;&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
constexpr
link:#mrdocs-Expected-0a[Expected]&
link:#mrdocs-Expected-0a-operator_assign-00[operator&equals;](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& e);
----

[.small]#link:#mrdocs-Expected-0a-operator_assign-00[_» more&period;&period;&period;_]#

Assign a new value, reconstructing if currently disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U = T&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;Expected, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;) &amp;&amp;
        (!detail&colon;&colon;isUnexpected&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;) &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, U&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
constexpr
link:#mrdocs-Expected-0a[Expected]&
link:#mrdocs-Expected-0a-operator_assign-04[operator&equals;](U&& v);
----

[.small]#link:#mrdocs-Expected-0a-operator_assign-04[_» more&period;&period;&period;_]#

Assign a new unexpected error from rvalue&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
constexpr
link:#mrdocs-Expected-0a[Expected]&
link:#mrdocs-Expected-0a-operator_assign-03[operator&equals;](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& e);
----

[.small]#link:#mrdocs-Expected-0a-operator_assign-03[_» more&period;&period;&period;_]#

Copy&hyphen;assign from another Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected]&
operator&equals;(link:#mrdocs-Expected-0a[Expected] const& other) = delete;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Assign from another Expected with compatible value&sol;error types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a[Expected]&
operator&equals;(link:#mrdocs-Expected-0a[Expected] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;assignable&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;assignable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;copy&lowbar;assignable&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;assignable&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to copy assign from
|===

Move&hyphen;assign from another Expected with compatible value&sol;error types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0a[Expected]&
operator&equals;(link:#mrdocs-Expected-0a[Expected]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;assignable&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;assignable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;move&lowbar;assignable&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;assignable&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to move assign from
|===

Assign a new unexpected error from lvalue&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G const&amp;&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
constexpr
link:#mrdocs-Expected-0a[Expected]&
operator&equals;(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& e);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The object to copy assign from
|===

Assign a new value, reconstructing if currently disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U = T&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;Expected, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;) &amp;&amp;
        (!detail&colon;&colon;isUnexpected&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;) &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, U&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
constexpr
link:#mrdocs-Expected-0a[Expected]&
operator&equals;(U&& v);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The object to move assign from
|===

Assign a new unexpected error from rvalue&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
constexpr
link:#mrdocs-Expected-0a[Expected]&
operator&equals;(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& e);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The object to move assign from
|===

`and&lowbar;then` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Invoke `f` when engaged, propagate error otherwise&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0a-and_then-08[and&lowbar;then](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-0a-and_then-08[_» more&period;&period;&period;_]#

Invoke `f` when engaged (const lvalue), propagate error otherwise&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E const&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0a-and_then-0d[and&lowbar;then](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-0a-and_then-0d[_» more&period;&period;&period;_]#

Invoke `f` when engaged (rvalue), propagate error otherwise&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&gt;
constexpr
auto
link:#mrdocs-Expected-0a-and_then-07[and&lowbar;then](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-and_then-07[_» more&period;&period;&period;_]#

Invoke `f` when engaged (const rvalue), propagate error otherwise&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, const E&gt;
constexpr
auto
link:#mrdocs-Expected-0a-and_then-06[and&lowbar;then](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-and_then-06[_» more&period;&period;&period;_]#

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation that returns another Expected&period;
|===

Invoke `f` when engaged, propagate error otherwise&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&amp;&gt;
constexpr
auto
and&lowbar;then(Fn&& f) &amp;;
----

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation that returns another Expected&period;
|===

Invoke `f` when engaged (const lvalue), propagate error otherwise&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E const&amp;&gt;
constexpr
auto
and&lowbar;then(Fn&& f) const &amp;;
----

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation that returns another Expected&period;
|===

Invoke `f` when engaged (rvalue), propagate error otherwise&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&gt;
constexpr
auto
and&lowbar;then(Fn&& f) &amp;&amp;;
----

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation that returns another Expected&period;
|===

Invoke `f` when engaged (const rvalue), propagate error otherwise&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, const E&gt;
constexpr
auto
and&lowbar;then(Fn&& f) const &amp;&amp;;
----

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation that returns another Expected&period;
|===

`emplace` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Reconstruct the value in&hyphen;place, discarding any current state&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;
constexpr
T&
link:#mrdocs-Expected-0a-emplace-0d[emplace](Args&&&period;&period;&period; args) noexcept;
----

[.small]#link:#mrdocs-Expected-0a-emplace-0d[_» more&period;&period;&period;_]#

Reconstruct the value from an initializer list&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;
            T, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
T&
link:#mrdocs-Expected-0a-emplace-0f[emplace](
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept;
----

[.small]#link:#mrdocs-Expected-0a-emplace-0f[_» more&period;&period;&period;_]#

== Return Value

Reference to the newly emplaced value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the value constructor&period;
| *il*
| Initializer list forwarded to the value constructor&period;
|===

Reconstruct the value in&hyphen;place, discarding any current state&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;
constexpr
T&
emplace(Args&&&period;&period;&period; args) noexcept;
----

== Return Value

Reference to the newly emplaced value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the value constructor&period;
|===

Reconstruct the value from an initializer list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;
            T, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
T&
emplace(
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept;
----

== Return Value

Reference to the newly emplaced value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *il*
| Initializer list forwarded to the value constructor&period;
| *args*
| Additional constructor arguments&period;
|===

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E const&
link:#mrdocs-Expected-0a-error-03[error]() const &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0a-error-03[_» more&period;&period;&period;_]#

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E&
link:#mrdocs-Expected-0a-error-0c[error]() &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0a-error-0c[_» more&period;&period;&period;_]#

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E const&&
link:#mrdocs-Expected-0a-error-07[error]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0a-error-07[_» more&period;&period;&period;_]#

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E&&
link:#mrdocs-Expected-0a-error-02a[error]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0a-error-02a[_» more&period;&period;&period;_]#

== Return Value

* Reference to the contained error&period;
* Rvalue reference to the contained error&period;

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E const&
error() const &amp; noexcept;
----

== Return Value

Reference to the contained error&period;

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E&
error() &amp; noexcept;
----

== Return Value

Reference to the contained error&period;

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E const&&
error() const &amp;&amp; noexcept;
----

== Return Value

Rvalue reference to the contained error&period;

Access the stored error&semi; precondition&colon; !has&lowbar;value()&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E&&
error() &amp;&amp; noexcept;
----

== Return Value

Rvalue reference to the contained error&period;

`error&lowbar;or` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Return the contained error or a fallback copy&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
link:#mrdocs-Expected-0a-error_or-0e[error&lowbar;or](G&& e) const &amp;;
----

[.small]#link:#mrdocs-Expected-0a-error_or-0e[_» more&period;&period;&period;_]#

Return the contained error or a fallback move&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
link:#mrdocs-Expected-0a-error_or-0f[error&lowbar;or](G&& e) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-error_or-0f[_» more&period;&period;&period;_]#

== Return Value

Contained error or the fallback converted to `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Fallback error to use when engaged&period;
|===

Return the contained error or a fallback copy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
error&lowbar;or(G&& e) const &amp;;
----

== Return Value

Contained error or the fallback converted to `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Fallback error to use when engaged&period;
|===

Return the contained error or a fallback move&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
error&lowbar;or(G&& e) &amp;&amp;;
----

== Return Value

Contained error or the fallback converted to `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Fallback error to use when engaged&period;
|===

Return true when the Expected contains a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
has&lowbar;value() const noexcept;
----

== Return Value

true when the Expected contains a value&period;

Dereference operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Dereference to a const lvalue value reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&
link:#mrdocs-Expected-0a-operator_star-0b[operator&ast;]() const &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0a-operator_star-0b[_» more&period;&period;&period;_]#

Dereference to an lvalue value reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&
link:#mrdocs-Expected-0a-operator_star-07[operator&ast;]() &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0a-operator_star-07[_» more&period;&period;&period;_]#

Dereference to a const rvalue value reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&&
link:#mrdocs-Expected-0a-operator_star-0d[operator&ast;]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0a-operator_star-0d[_» more&period;&period;&period;_]#

Dereference to an rvalue value reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&&
link:#mrdocs-Expected-0a-operator_star-06b1[operator&ast;]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0a-operator_star-06b1[_» more&period;&period;&period;_]#

== Return Value

Reference to the contained value&period;

Dereference to a const lvalue value reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&
operator&ast;() const &amp; noexcept;
----

== Return Value

Reference to the contained value&period;

Dereference to an lvalue value reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&
operator&ast;() &amp; noexcept;
----

== Return Value

Reference to the contained value&period;

Dereference to a const rvalue value reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&&
operator&ast;() const &amp;&amp; noexcept;
----

== Return Value

Reference to the contained value&period;

Dereference to an rvalue value reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&&
operator&ast;() &amp;&amp; noexcept;
----

== Return Value

Reference to the contained value&period;

Access value members through pointer syntax&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Access value members through pointer syntax&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const*
link:#mrdocs-Expected-0a-operator_ptr-04[operator&hyphen;&gt;]() const noexcept;
----

[.small]#link:#mrdocs-Expected-0a-operator_ptr-04[_» more&period;&period;&period;_]#

Access value members through pointer syntax&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T*
link:#mrdocs-Expected-0a-operator_ptr-00[operator&hyphen;&gt;]() noexcept;
----

[.small]#link:#mrdocs-Expected-0a-operator_ptr-00[_» more&period;&period;&period;_]#

== Return Value

Pointer to the contained value&period;

Access value members through pointer syntax&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const*
operator&hyphen;&gt;() const noexcept;
----

== Return Value

Pointer to the contained value&period;

Access value members through pointer syntax&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T*
operator&hyphen;&gt;() noexcept;
----

== Return Value

Pointer to the contained value&period;

`or&lowbar;else` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Invoke `f` when in error, otherwise return current value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0a-or_else-09[or&lowbar;else](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-0a-or_else-09[_» more&period;&period;&period;_]#

Invoke `f` when in error (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T const&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0a-or_else-08[or&lowbar;else](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-0a-or_else-08[_» more&period;&period;&period;_]#

Invoke `f` when in error (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T&gt;
constexpr
auto
link:#mrdocs-Expected-0a-or_else-0a[or&lowbar;else](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-or_else-0a[_» more&period;&period;&period;_]#

Invoke `f` when in error (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, const T&gt;
constexpr
auto
link:#mrdocs-Expected-0a-or_else-01[or&lowbar;else](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-or_else-01[_» more&period;&period;&period;_]#

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Invoke `f` when in error, otherwise return current value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T&amp;&gt;
constexpr
auto
or&lowbar;else(Fn&& f) &amp;;
----

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Invoke `f` when in error (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T const&amp;&gt;
constexpr
auto
or&lowbar;else(Fn&& f) const &amp;;
----

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Invoke `f` when in error (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T&gt;
constexpr
auto
or&lowbar;else(Fn&& f) &amp;&amp;;
----

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Invoke `f` when in error (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, const T&gt;
constexpr
auto
or&lowbar;else(Fn&& f) const &amp;&amp;;
----

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Swap the stored state with another Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(link:#mrdocs-Expected-0a[Expected]& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;swappable&lowbar;v&lt;T &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;swappable&lowbar;v&lt;E &amp;&gt;)
requires std&colon;&colon;is&lowbar;swappable&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;swappable&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &verbar;&verbar;
         std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| A container holding an error or a value&period;
|===

`transform` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Map the contained value, propagate error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0a-transform-0f[transform](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-0a-transform-0f[_» more&period;&period;&period;_]#

Map the contained value (const overload), propagate error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E const&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0a-transform-00[transform](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-0a-transform-00[_» more&period;&period;&period;_]#

Map the contained value (rvalue), propagate error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&gt;
constexpr
auto
link:#mrdocs-Expected-0a-transform-0c[transform](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-transform-0c[_» more&period;&period;&period;_]#

Map the contained value (const rvalue), propagate error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, const E&gt;
constexpr
auto
link:#mrdocs-Expected-0a-transform-08[transform](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-transform-08[_» more&period;&period;&period;_]#

== Return Value

Expected holding the mapped value or the original error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the value&period;
|===

Map the contained value, propagate error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&amp;&gt;
constexpr
auto
transform(Fn&& f) &amp;;
----

== Return Value

Expected holding the mapped value or the original error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the value&period;
|===

Map the contained value (const overload), propagate error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E const&amp;&gt;
constexpr
auto
transform(Fn&& f) const &amp;;
----

== Return Value

Expected holding the mapped value or the original error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the value&period;
|===

Map the contained value (rvalue), propagate error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&gt;
constexpr
auto
transform(Fn&& f) &amp;&amp;;
----

== Return Value

Expected holding the mapped value or the original error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the value&period;
|===

Map the contained value (const rvalue), propagate error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, const E&gt;
constexpr
auto
transform(Fn&& f) const &amp;&amp;;
----

== Return Value

Expected holding the mapped value or the original error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the value&period;
|===

`transform&lowbar;error` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Map the contained error, preserve value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0a-transform_error-09[transform&lowbar;error](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-0a-transform_error-09[_» more&period;&period;&period;_]#

Map the contained error (const lvalue), preserve value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T const&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0a-transform_error-05[transform&lowbar;error](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-0a-transform_error-05[_» more&period;&period;&period;_]#

Map the contained error (rvalue), preserve value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T&gt;
constexpr
auto
link:#mrdocs-Expected-0a-transform_error-03[transform&lowbar;error](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-transform_error-03[_» more&period;&period;&period;_]#

Map the contained error (const rvalue), preserve value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, const T&gt;
constexpr
auto
link:#mrdocs-Expected-0a-transform_error-01[transform&lowbar;error](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-transform_error-01[_» more&period;&period;&period;_]#

== Return Value

Expected holding the original value or mapped error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the error&period;
|===

Map the contained error, preserve value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T&amp;&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) &amp;;
----

== Return Value

Expected holding the original value or mapped error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the error&period;
|===

Map the contained error (const lvalue), preserve value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T const&amp;&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) const &amp;;
----

== Return Value

Expected holding the original value or mapped error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the error&period;
|===

Map the contained error (rvalue), preserve value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, T&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) &amp;&amp;;
----

== Return Value

Expected holding the original value or mapped error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the error&period;
|===

Map the contained error (const rvalue), preserve value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, const T&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) const &amp;&amp;;
----

== Return Value

Expected holding the original value or mapped error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Mapping function applied to the error&period;
|===

`value` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Access the stored value or throw BadExpectedAccess&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T const&
link:#mrdocs-Expected-0a-value-0c[value]() const &amp;;
----

[.small]#link:#mrdocs-Expected-0a-value-0c[_» more&period;&period;&period;_]#

Access the stored value or throw BadExpectedAccess&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T&
link:#mrdocs-Expected-0a-value-0d[value]() &amp;;
----

[.small]#link:#mrdocs-Expected-0a-value-0d[_» more&period;&period;&period;_]#

Access the stored value or throw BadExpectedAccess (rvalue overload)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T const&&
link:#mrdocs-Expected-0a-value-0a[value]() const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-value-0a[_» more&period;&period;&period;_]#

Access the stored value or throw BadExpectedAccess (rvalue overload)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T&&
link:#mrdocs-Expected-0a-value-0e[value]() &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0a-value-0e[_» more&period;&period;&period;_]#

== Return Value

* Reference to the contained value&period;
* Rvalue reference to the contained value&period;

Access the stored value or throw BadExpectedAccess&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T const&
value() const &amp;;
----

== Return Value

Reference to the contained value&period;

Access the stored value or throw BadExpectedAccess&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T&
value() &amp;;
----

== Return Value

Reference to the contained value&period;

Access the stored value or throw BadExpectedAccess (rvalue overload)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T const&&
value() const &amp;&amp;;
----

== Return Value

Rvalue reference to the contained value&period;

Access the stored value or throw BadExpectedAccess (rvalue overload)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T&&
value() &amp;&amp;;
----

== Return Value

Rvalue reference to the contained value&period;

`value&lowbar;or` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Return the contained value or a fallback copy&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
T
link:#mrdocs-Expected-0a-value_or-07[value&lowbar;or](U&& v) const &amp; noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;convertible&lowbar;v&lt;U, T&gt;);
----

[.small]#link:#mrdocs-Expected-0a-value_or-07[_» more&period;&period;&period;_]#

Return the contained value or a fallback move&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
T
link:#mrdocs-Expected-0a-value_or-00[value&lowbar;or](U&& v) &amp;&amp; noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;convertible&lowbar;v&lt;U, T&gt;);
----

[.small]#link:#mrdocs-Expected-0a-value_or-00[_» more&period;&period;&period;_]#

== Return Value

Contained value or the fallback converted to `T`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Fallback value to use when disengaged&period;
|===

Return the contained value or a fallback copy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
T
value&lowbar;or(U&& v) const &amp; noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;convertible&lowbar;v&lt;U, T&gt;);
----

== Return Value

Contained value or the fallback converted to `T`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Fallback value to use when disengaged&period;
|===

Return the contained value or a fallback move&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
T
value&lowbar;or(U&& v) &amp;&amp; noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;T&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;convertible&lowbar;v&lt;U, T&gt;);
----

== Return Value

Contained value or the fallback converted to `T`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Fallback value to use when disengaged&period;
|===

Return true when the Expected contains a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit
operator bool() const noexcept;
----

== Return Value

true when the Expected contains a value&period;

Storage for the unexpected error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
E unex&lowbar;;
----

Storage for the engaged value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
T val&lowbar;;
----

Expected specialization for `void` values&period; Holds either success (no payload) or an unexpected error `E`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class E&gt;
requires std&colon;&colon;is&lowbar;void&lowbar;v&lt;T&gt;
class link:#mrdocs-Expected-0a[Expected]&lt;T, E&gt;;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-0f-error_type[`error&lowbar;type`] 
| Error type stored when disengaged&period;
| link:#mrdocs-Expected-0f-rebind[`rebind`] 
| Rebind to another value type with the same error type&period;
| link:#mrdocs-Expected-0f-unexpected_type[`unexpected&lowbar;type`] 
| Alias for the unexpected wrapper&period;
| link:#mrdocs-Expected-0f-value_type[`value&lowbar;type`] 
| Value type for this specialization (always void)&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-0f-2constructor-04ad[`Expected`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-Expected-0f-2destructor-08[`&#126;Expected`] [.small]#[destructor]#
| Destructors
| link:#mrdocs-Expected-0f-operator_assign-0e[`operator&equals;`]  [.small]#[deleted]#
| Assignment operators
| link:#mrdocs-Expected-0f-and_then-06[`and&lowbar;then`] 
| `and&lowbar;then` overloads
| link:#mrdocs-Expected-0f-emplace[`emplace`] 
| Reset to engaged state (no error)&period;
| link:#mrdocs-Expected-0f-error-0d[`error`] 
| `error` overloads
| link:#mrdocs-Expected-0f-error_or-08[`error&lowbar;or`] 
| `error&lowbar;or` overloads
| link:#mrdocs-Expected-0f-has_value[`has&lowbar;value`] 
| Return true when the Expected holds a value&period;
| link:#mrdocs-Expected-0f-operator_star[`operator&ast;`] 
| Ensure the Expected is engaged&semi; throws if it holds an error&period;
| link:#mrdocs-Expected-0f-or_else-0a[`or&lowbar;else`] 
| `or&lowbar;else` overloads
| link:#mrdocs-Expected-0f-swap[`swap`] 
| Swap states with another void Expected&period;
| link:#mrdocs-Expected-0f-transform-08[`transform`] 
| `transform` overloads
| link:#mrdocs-Expected-0f-transform_error-09[`transform&lowbar;error`] 
| `transform&lowbar;error` overloads
| link:#mrdocs-Expected-0f-value-02[`value`] 
| `value` overloads
| link:#mrdocs-Expected-0f-2conversion[`operator bool`] 
| Return true when the Expected holds a value&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-0f-unex_[`unex&lowbar;`] [.small]#[variant member]#
| Stored unexpected error&period;
| link:#mrdocs-Expected-0f-void_[`void&lowbar;`] [.small]#[variant member]#
| Placeholder for the engaged state&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-swap-03[mrdocs::swap]`
| Swap contents with another Expected&period;
| `link:#mrdocs-operator_eq-066[mrdocs::operator&equals;&equals;]`
| Equality operator
| `link:#mrdocs-operator_eq-002[mrdocs::operator&equals;&equals;]`
| Equality operator
| `link:#mrdocs-Expected-0a[mrdocs::Expected]`
| A container holding an error or a value&period;
|===

Error type stored when disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using error&lowbar;type = E;
----

Rebind to another value type with the same error type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
using rebind = link:#mrdocs-Expected-0a[Expected&lt;U, error&lowbar;type&gt;];
----

Alias for the unexpected wrapper&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using unexpected&lowbar;type = link:#mrdocs-Unexpected-0c[Unexpected&lt;E&gt;];
----

Value type for this specialization (always void)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = T;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Construct an engaged Expected&lt;void&gt;&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f-2constructor-0e1[Expected]() noexcept;
----

[.small]#link:#mrdocs-Expected-0f-2constructor-0e1[_» more&period;&period;&period;_]#

Default copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0f-2constructor-08[Expected](link:#mrdocs-Expected-0f[Expected] const& other) = default;
----

[.small]#link:#mrdocs-Expected-0f-2constructor-08[_» more&period;&period;&period;_]#

Copy&hyphen;construct with explicit error handling for non&hyphen;trivial `E`&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f-2constructor-042[Expected](link:#mrdocs-Expected-0f[Expected] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (!std&colon;&colon;is&lowbar;trivially&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2constructor-042[_» more&period;&period;&period;_]#

Default move constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0f-2constructor-0bc[Expected](link:#mrdocs-Expected-0f[Expected]&& other) = default;
----

[.small]#link:#mrdocs-Expected-0f-2constructor-0bc[_» more&period;&period;&period;_]#

Move&hyphen;construct with explicit error handling for non&hyphen;trivial `E`&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f-2constructor-0c[Expected](link:#mrdocs-Expected-0f[Expected]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (!std&colon;&colon;is&lowbar;trivially&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2constructor-0c[_» more&period;&period;&period;_]#

Construct an engaged Expected with in&hyphen;place tag&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
link:#mrdocs-Expected-0f-2constructor-02[Expected](std::in&lowbar;place&lowbar;t value) noexcept;
----

[.small]#link:#mrdocs-Expected-0f-2constructor-02[_» more&period;&period;&period;_]#

Construct a disengaged Expected from an unexpected error (copy)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const G &amp;, E&gt;)
link:#mrdocs-Expected-0f-2constructor-09[Expected](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2constructor-09[_» more&period;&period;&period;_]#

Construct a disengaged Expected from an unexpected error (move)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;G, E&gt;)
link:#mrdocs-Expected-0f-2constructor-0b8[Expected](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2constructor-0b8[_» more&period;&period;&period;_]#

Copy&hyphen;construct from a compatible Expected carrying void&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class G&gt;
requires std&colon;&colon;is&lowbar;void&lowbar;v&lt;U&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &amp;&amp;
        (!constructible&lowbar;from&lowbar;expected&lt;U, G&gt;)
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const G &amp;, E&gt;)
link:#mrdocs-Expected-0f-2constructor-04a8[Expected](link:#mrdocs-Expected-0a[Expected&lt;U, G&gt;] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2constructor-04a8[_» more&period;&period;&period;_]#

Move&hyphen;construct from a compatible Expected carrying void&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class G&gt;
requires std&colon;&colon;is&lowbar;void&lowbar;v&lt;U&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp;
        (!constructible&lowbar;from&lowbar;expected&lt;U, G&gt;)
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;G, E&gt;)
link:#mrdocs-Expected-0f-2constructor-0ed[Expected](link:#mrdocs-Expected-0a[Expected&lt;U, G&gt;]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2constructor-0ed[_» more&period;&period;&period;_]#

Construct a disengaged Expected from error arguments&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Expected-0f-2constructor-06[Expected](
    link:#mrdocs-unexpect_t[unexpect&lowbar;t],
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2constructor-06[_» more&period;&period;&period;_]#

Construct a disengaged Expected from an initializer list of errors&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Expected-0f-2constructor-0d[Expected](
    link:#mrdocs-unexpect_t[unexpect&lowbar;t],
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2constructor-0d[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the error constructor&period;
| *il*
| Initializer list forwarded to the error constructor&period;
|===

Construct an engaged Expected&lt;void&gt;&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected() noexcept;
----

Default copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Expected(link:#mrdocs-Expected-0f[Expected] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Copy&hyphen;construct with explicit error handling for non&hyphen;trivial `E`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected(link:#mrdocs-Expected-0f[Expected] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (!std&colon;&colon;is&lowbar;trivially&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to copy construct from
|===

Default move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Expected(link:#mrdocs-Expected-0f[Expected]&& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Move&hyphen;construct with explicit error handling for non&hyphen;trivial `E`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected(link:#mrdocs-Expected-0f[Expected]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        (!std&colon;&colon;is&lowbar;trivially&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to move construct from
|===

Construct an engaged Expected with in&hyphen;place tag&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
Expected(std::in&lowbar;place&lowbar;t value) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to construct from
|===

Construct a disengaged Expected from an unexpected error (copy)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const G &amp;, E&gt;)
Expected(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The object to copy construct from
|===

Construct a disengaged Expected from an unexpected error (move)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;G, E&gt;)
Expected(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The object to move construct from
|===

Copy&hyphen;construct from a compatible Expected carrying void&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class G&gt;
requires std&colon;&colon;is&lowbar;void&lowbar;v&lt;U&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &amp;&amp;
        (!constructible&lowbar;from&lowbar;expected&lt;U, G&gt;)
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const G &amp;, E&gt;)
Expected(link:#mrdocs-Expected-0a[Expected&lt;U, G&gt;] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to copy construct from
|===

Move&hyphen;construct from a compatible Expected carrying void&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class G&gt;
requires std&colon;&colon;is&lowbar;void&lowbar;v&lt;U&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp;
        (!constructible&lowbar;from&lowbar;expected&lt;U, G&gt;)
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;G, E&gt;)
Expected(link:#mrdocs-Expected-0a[Expected&lt;U, G&gt;]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to move construct from
|===

Construct a disengaged Expected from error arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;
constexpr
explicit
Expected(
    link:#mrdocs-unexpect_t[unexpect&lowbar;t],
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the error constructor&period;
|===

Construct a disengaged Expected from an initializer list of errors&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
Expected(
    link:#mrdocs-unexpect_t[unexpect&lowbar;t],
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *il*
| Initializer list forwarded to the error constructor&period;
| *args*
| Additional arguments forwarded to the error constructor&period;
|===

Destructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Defaulted trivial destructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f-2destructor-07[&#126;Expected]() = default;
----

[.small]#link:#mrdocs-Expected-0f-2destructor-07[_» more&period;&period;&period;_]#

Destroy the stored error when non&hyphen;trivial&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f-2destructor-0e[&#126;Expected]()
requires (!std&colon;&colon;is&lowbar;trivially&lowbar;destructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-0f-2destructor-0e[_» more&period;&period;&period;_]#

Defaulted trivial destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
&#126;Expected() = default;
----

Destroy the stored error when non&hyphen;trivial&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
&#126;Expected()
requires (!std&colon;&colon;is&lowbar;trivially&lowbar;destructible&lowbar;v&lt;E&gt;);
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Copy assignment disabled to keep semantics explicit&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0f[Expected]&
link:#mrdocs-Expected-0f-operator_assign-01[operator&equals;](link:#mrdocs-Expected-0f[Expected] const& other) = delete;
----

[.small]#link:#mrdocs-Expected-0f-operator_assign-01[_» more&period;&period;&period;_]#

Copy&hyphen;assign from another void Expected&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f[Expected]&
link:#mrdocs-Expected-0f-operator_assign-02[operator&equals;](link:#mrdocs-Expected-0f[Expected] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;assignable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;assignable&lowbar;v&lt;E&gt;;
----

[.small]#link:#mrdocs-Expected-0f-operator_assign-02[_» more&period;&period;&period;_]#

Move&hyphen;assign from another void Expected&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f[Expected]&
link:#mrdocs-Expected-0f-operator_assign-0f[operator&equals;](link:#mrdocs-Expected-0f[Expected]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;assignable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;assignable&lowbar;v&lt;E&gt;;
----

[.small]#link:#mrdocs-Expected-0f-operator_assign-0f[_» more&period;&period;&period;_]#

Assign a new unexpected error (lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G const&amp;&gt;
constexpr
link:#mrdocs-Expected-0f[Expected]&
link:#mrdocs-Expected-0f-operator_assign-0a7[operator&equals;](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& e);
----

[.small]#link:#mrdocs-Expected-0f-operator_assign-0a7[_» more&period;&period;&period;_]#

Assign a new unexpected error (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G&gt;
constexpr
link:#mrdocs-Expected-0f[Expected]&
link:#mrdocs-Expected-0f-operator_assign-0ae[operator&equals;](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& e);
----

[.small]#link:#mrdocs-Expected-0f-operator_assign-0ae[_» more&period;&period;&period;_]#

Copy assignment disabled to keep semantics explicit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0f[Expected]&
operator&equals;(link:#mrdocs-Expected-0f[Expected] const& other) = delete;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Copy&hyphen;assign from another void Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f[Expected]&
operator&equals;(link:#mrdocs-Expected-0f[Expected] const& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;assignable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;copy&lowbar;assignable&lowbar;v&lt;E&gt;;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to copy assign from
|===

Move&hyphen;assign from another void Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-0f[Expected]&
operator&equals;(link:#mrdocs-Expected-0f[Expected]&& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;assignable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;assignable&lowbar;v&lt;E&gt;;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The object to move assign from
|===

Assign a new unexpected error (lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G const&amp;&gt;
constexpr
link:#mrdocs-Expected-0f[Expected]&
operator&equals;(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& e);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The object to copy assign from
|===

Assign a new unexpected error (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G&gt;
constexpr
link:#mrdocs-Expected-0f[Expected]&
operator&equals;(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& e);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The object to move assign from
|===

`and&lowbar;then` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Invoke `f` when engaged, propagate error otherwise&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0f-and_then-07[and&lowbar;then](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-0f-and_then-07[_» more&period;&period;&period;_]#

Invoke `f` when engaged (const lvalue), propagate error otherwise&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E const&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0f-and_then-03[and&lowbar;then](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-0f-and_then-03[_» more&period;&period;&period;_]#

Invoke `f` when engaged (rvalue), propagate error otherwise&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&gt;
constexpr
auto
link:#mrdocs-Expected-0f-and_then-09[and&lowbar;then](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-and_then-09[_» more&period;&period;&period;_]#

Invoke `f` when engaged (const rvalue), propagate error otherwise&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, const E&gt;
constexpr
auto
link:#mrdocs-Expected-0f-and_then-0c[and&lowbar;then](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-and_then-0c[_» more&period;&period;&period;_]#

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation returning another Expected&period;
|===

Invoke `f` when engaged, propagate error otherwise&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&amp;&gt;
constexpr
auto
and&lowbar;then(Fn&& f) &amp;;
----

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation returning another Expected&period;
|===

Invoke `f` when engaged (const lvalue), propagate error otherwise&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E const&amp;&gt;
constexpr
auto
and&lowbar;then(Fn&& f) const &amp;;
----

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation returning another Expected&period;
|===

Invoke `f` when engaged (rvalue), propagate error otherwise&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&gt;
constexpr
auto
and&lowbar;then(Fn&& f) &amp;&amp;;
----

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation returning another Expected&period;
|===

Invoke `f` when engaged (const rvalue), propagate error otherwise&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, const E&gt;
constexpr
auto
and&lowbar;then(Fn&& f) const &amp;&amp;;
----

== Return Value

Result of `f` or this error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation returning another Expected&period;
|===

Reset to engaged state (no error)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
emplace() noexcept;
----

`error` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Return a const reference to the contained error&semi; precondition&colon; disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E const&
link:#mrdocs-Expected-0f-error-0a[error]() const &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0f-error-0a[_» more&period;&period;&period;_]#

Return a reference to the contained error&semi; precondition&colon; disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E&
link:#mrdocs-Expected-0f-error-05[error]() &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0f-error-05[_» more&period;&period;&period;_]#

Return an rvalue reference to the contained error&semi; precondition&colon; disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E const&&
link:#mrdocs-Expected-0f-error-0e[error]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0f-error-0e[_» more&period;&period;&period;_]#

Return an rvalue reference to the contained error&semi; precondition&colon; disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E&&
link:#mrdocs-Expected-0f-error-0b[error]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-0f-error-0b[_» more&period;&period;&period;_]#

Return a const reference to the contained error&semi; precondition&colon; disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E const&
error() const &amp; noexcept;
----

== Return Value

a const reference to the contained error&semi; precondition&colon; disengaged&period;

Return a reference to the contained error&semi; precondition&colon; disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E&
error() &amp; noexcept;
----

== Return Value

a reference to the contained error&semi; precondition&colon; disengaged&period;

Return an rvalue reference to the contained error&semi; precondition&colon; disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E const&&
error() const &amp;&amp; noexcept;
----

== Return Value

an rvalue reference to the contained error&semi; precondition&colon; disengaged&period;

Return an rvalue reference to the contained error&semi; precondition&colon; disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
E&&
error() &amp;&amp; noexcept;
----

== Return Value

an rvalue reference to the contained error&semi; precondition&colon; disengaged&period;

`error&lowbar;or` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Return the error or a fallback copy&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
link:#mrdocs-Expected-0f-error_or-01[error&lowbar;or](G&& e) const &amp;;
----

[.small]#link:#mrdocs-Expected-0f-error_or-01[_» more&period;&period;&period;_]#

Return the error or a fallback move&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
link:#mrdocs-Expected-0f-error_or-0f[error&lowbar;or](G&& e) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-error_or-0f[_» more&period;&period;&period;_]#

== Return Value

Contained error or the fallback converted to `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Fallback to return if engaged&period;
|===

Return the error or a fallback copy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
error&lowbar;or(G&& e) const &amp;;
----

== Return Value

Contained error or the fallback converted to `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Fallback to return if engaged&period;
|===

Return the error or a fallback move&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
error&lowbar;or(G&& e) &amp;&amp;;
----

== Return Value

Contained error or the fallback converted to `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Fallback to return if engaged&period;
|===

Return true when the Expected holds a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
has&lowbar;value() const noexcept;
----

== Return Value

true when the Expected holds a value&period;

Ensure the Expected is engaged&semi; throws if it holds an error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
operator&ast;() const noexcept;
----

`or&lowbar;else` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Invoke `f` when in error, otherwise return current value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-0f-or_else-0c[or&lowbar;else](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-0f-or_else-0c[_» more&period;&period;&period;_]#

Invoke `f` when in error (const lvalue), otherwise return current value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-0f-or_else-0b[or&lowbar;else](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-0f-or_else-0b[_» more&period;&period;&period;_]#

Invoke `f` when in error (rvalue), otherwise return current value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-0f-or_else-03[or&lowbar;else](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-or_else-03[_» more&period;&period;&period;_]#

Invoke `f` when in error (const rvalue), otherwise return current value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-0f-or_else-09[or&lowbar;else](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-or_else-09[_» more&period;&period;&period;_]#

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Invoke `f` when in error, otherwise return current value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
or&lowbar;else(Fn&& f) &amp;;
----

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Invoke `f` when in error (const lvalue), otherwise return current value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
or&lowbar;else(Fn&& f) const &amp;;
----

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Invoke `f` when in error (rvalue), otherwise return current value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
or&lowbar;else(Fn&& f) &amp;&amp;;
----

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Invoke `f` when in error (const rvalue), otherwise return current value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
or&lowbar;else(Fn&& f) const &amp;&amp;;
----

== Return Value

Current value or result of `f`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Swap states with another void Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(link:#mrdocs-Expected-0f[Expected]& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;swappable&lowbar;v&lt;E &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;swappable&lowbar;v&lt;E&gt; &amp;&amp;
        std&colon;&colon;is&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| Other instance to exchange with&period;
|===

`transform` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Transform the contained error type when engaged (lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0f-transform-0b[transform](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-0f-transform-0b[_» more&period;&period;&period;_]#

Transform the contained error type when engaged (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E const&amp;&gt;
constexpr
auto
link:#mrdocs-Expected-0f-transform-0a[transform](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-0f-transform-0a[_» more&period;&period;&period;_]#

Transform the contained error type when engaged (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&gt;
constexpr
auto
link:#mrdocs-Expected-0f-transform-04[transform](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-transform-04[_» more&period;&period;&period;_]#

Transform the contained error type when engaged (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, const E&gt;
constexpr
auto
link:#mrdocs-Expected-0f-transform-0c[transform](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-transform-0c[_» more&period;&period;&period;_]#

== Return Value

New Expected produced from `f` or the existing error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

Transform the contained error type when engaged (lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&amp;&gt;
constexpr
auto
transform(Fn&& f) &amp;;
----

== Return Value

New Expected produced from `f` or the existing error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

Transform the contained error type when engaged (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E const&amp;&gt;
constexpr
auto
transform(Fn&& f) const &amp;;
----

== Return Value

New Expected produced from `f` or the existing error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

Transform the contained error type when engaged (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, E&gt;
constexpr
auto
transform(Fn&& f) &amp;&amp;;
----

== Return Value

New Expected produced from `f` or the existing error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

Transform the contained error type when engaged (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, const E&gt;
constexpr
auto
transform(Fn&& f) const &amp;&amp;;
----

== Return Value

New Expected produced from `f` or the existing error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

`transform&lowbar;error` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Transform the stored error value when disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-0f-transform_error-02[transform&lowbar;error](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-0f-transform_error-02[_» more&period;&period;&period;_]#

Transform the stored error value when disengaged (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-0f-transform_error-0e[transform&lowbar;error](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-0f-transform_error-0e[_» more&period;&period;&period;_]#

Transform the stored error value when disengaged (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-0f-transform_error-06[transform&lowbar;error](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-transform_error-06[_» more&period;&period;&period;_]#

Transform the stored error value when disengaged (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-0f-transform_error-07[transform&lowbar;error](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-transform_error-07[_» more&period;&period;&period;_]#

== Return Value

Expected containing the transformed error or the current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

Transform the stored error value when disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) &amp;;
----

== Return Value

Expected containing the transformed error or the current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

Transform the stored error value when disengaged (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) const &amp;;
----

== Return Value

Expected containing the transformed error or the current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

Transform the stored error value when disengaged (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) &amp;&amp;;
----

== Return Value

Expected containing the transformed error or the current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

Transform the stored error value when disengaged (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) const &amp;&amp;;
----

== Return Value

Expected containing the transformed error or the current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation to apply&period;
|===

`value` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Ensure the Expected is engaged&semi; throws BadExpectedAccess if not&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-Expected-0f-value-07b[value]() const &amp;;
----

[.small]#link:#mrdocs-Expected-0f-value-07b[_» more&period;&period;&period;_]#

Ensure the Expected is engaged&semi; throws BadExpectedAccess if not (rvalue overload)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-Expected-0f-value-077[value]() &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-0f-value-077[_» more&period;&period;&period;_]#

Ensure the Expected is engaged&semi; throws BadExpectedAccess if not&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
value() const &amp;;
----

Ensure the Expected is engaged&semi; throws BadExpectedAccess if not (rvalue overload)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
value() &amp;&amp;;
----

Return true when the Expected holds a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit
operator bool() const noexcept;
----

== Return Value

true when the Expected holds a value&period;

Stored unexpected error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
E unex&lowbar;;
----

Placeholder for the engaged state&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
engaged&lowbar;state void&lowbar;;
----

Expected specialization for lvalue references&period; Holds either a bound reference to `T` or an unexpected error `E`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class E&gt;
class link:#mrdocs-Expected-0a[Expected]&lt;T&, E&gt;;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-01-error_type[`error&lowbar;type`] 
| Error type carried when disengaged&period;
| link:#mrdocs-Expected-01-rebind[`rebind`] 
| Rebind the reference to another value type while keeping `E`&period;
| link:#mrdocs-Expected-01-unexpected_type[`unexpected&lowbar;type`] 
| Convenience alias for the unexpected wrapper&period;
| link:#mrdocs-Expected-01-value_type[`value&lowbar;type`] 
| Referenced value type&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-01-2constructor-04a[`Expected`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-Expected-01-2destructor[`&#126;Expected`] [.small]#[destructor]#
| Destroy the held error when disengaged&period;
| link:#mrdocs-Expected-01-operator_assign-0b[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-Expected-01-and_then-00[`and&lowbar;then`] 
| `and&lowbar;then` overloads
| link:#mrdocs-Expected-01-emplace-058[`emplace`] 
| `emplace` overloads
| link:#mrdocs-Expected-01-error-01[`error`] 
| `error` overloads
| link:#mrdocs-Expected-01-error_or-08[`error&lowbar;or`] 
| `error&lowbar;or` overloads
| link:#mrdocs-Expected-01-has_value[`has&lowbar;value`] 
| Check whether the Expected currently contains a reference&period;
| link:#mrdocs-Expected-01-operator_star-068[`operator&ast;`] 
| Dereference operators
| link:#mrdocs-Expected-01-operator_ptr-05[`operator&hyphen;&gt;`] 
| Access the bound reference pointer&semi; undefined if disengaged&period;
| link:#mrdocs-Expected-01-or_else-07[`or&lowbar;else`] 
| `or&lowbar;else` overloads
| link:#mrdocs-Expected-01-swap[`swap`] 
| Swap state with another reference Expected&period;
| link:#mrdocs-Expected-01-transform-09[`transform`] 
| `transform` overloads
| link:#mrdocs-Expected-01-transform_error-08[`transform&lowbar;error`] 
| `transform&lowbar;error` overloads
| link:#mrdocs-Expected-01-value-03[`value`] 
| `value` overloads
| link:#mrdocs-Expected-01-value_or-0c[`value&lowbar;or`] 
| `value&lowbar;or` overloads
| link:#mrdocs-Expected-01-2conversion[`operator bool`] 
| Return true when a reference is bound&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Expected-01-p_[`p&lowbar;`] [.small]#[variant member]#
| Pointer to the referenced value when engaged&period;
| link:#mrdocs-Expected-01-unex_[`unex&lowbar;`] [.small]#[variant member]#
| Stored unexpected error when disengaged&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-operator_eq-087[mrdocs::operator&equals;&equals;]`
| Equality operator
| `link:#mrdocs-operator_eq-0cf[mrdocs::operator&equals;&equals;]`
| Equality operator
| `link:#mrdocs-operator_eq-01b[mrdocs::operator&equals;&equals;]`
| Equality operator
| `link:#mrdocs-swap-07c9[mrdocs::swap]`
| 
|===

Error type carried when disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using error&lowbar;type = E;
----

Rebind the reference to another value type while keeping `E`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
using rebind = link:#mrdocs-Expected-0a[Expected&lt;U, error&lowbar;type&gt;];
----

Convenience alias for the unexpected wrapper&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using unexpected&lowbar;type = link:#mrdocs-Unexpected-0c[Unexpected&lt;E&gt;];
----

Referenced value type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = T&;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Construct a disengaged Expected with no bound reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-01-2constructor-0f[Expected]() noexcept;
----

[.small]#link:#mrdocs-Expected-01-2constructor-0f[_» more&period;&period;&period;_]#

Copy&hyphen;construct from another reference Expected&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-01-2constructor-03[Expected](link:#mrdocs-Expected-01[Expected] const& other) = default;
----

[.small]#link:#mrdocs-Expected-01-2constructor-03[_» more&period;&period;&period;_]#

Move&hyphen;construct from another reference Expected&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-01-2constructor-08[Expected](link:#mrdocs-Expected-01[Expected]&& other) = default;
----

[.small]#link:#mrdocs-Expected-01-2constructor-08[_» more&period;&period;&period;_]#

Bind to an lvalue result, marking the expected engaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, Expected&gt;
             &amp;&amp; !std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt;
             &amp;&amp; !detail&colon;&colon;isUnexpected&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt; &amp;&amp; ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;)
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, R&gt;)
link:#mrdocs-Expected-01-2constructor-0ed[Expected](U& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt;);
----

[.small]#link:#mrdocs-Expected-01-2constructor-0ed[_» more&period;&period;&period;_]#

Bind to the result stored inside another Expected value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, R&gt;)
link:#mrdocs-Expected-01-2constructor-00[Expected](link:#mrdocs-Expected-0a[Expected&lt;U, E&gt;]& other) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-01-2constructor-00[_» more&period;&period;&period;_]#

Copy&hyphen;construct from another reference Expected&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, R&gt;)
link:#mrdocs-Expected-01-2constructor-0bc[Expected](link:#mrdocs-Expected-0a[Expected&lt;U&, E&gt;] const& other) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-01-2constructor-0bc[_» more&period;&period;&period;_]#

Construct from an unexpected error (copy)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const G &amp;, E&gt;)
link:#mrdocs-Expected-01-2constructor-02b[Expected](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

[.small]#link:#mrdocs-Expected-01-2constructor-02b[_» more&period;&period;&period;_]#

Deleted&colon; binding a reference Expected from a temporary would dangle&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, Expected&gt;
             &amp;&amp; !std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt;
             &amp;&amp; !detail&colon;&colon;isUnexpected&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;
             &amp;&amp; !ok&lowbar;bind&lowbar;v&lt;U &amp;&amp;&gt;)
constexpr
link:#mrdocs-Expected-01-2constructor-0ea[Expected](U&& u) = delete;
----

[.small]#link:#mrdocs-Expected-01-2constructor-0ea[_» more&period;&period;&period;_]#

Deleted&colon; rebinding from a temporary Expected&lt;U, E&gt; would dangle&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
link:#mrdocs-Expected-01-2constructor-0ce[Expected](link:#mrdocs-Expected-0a[Expected&lt;U, E&gt;]&& value) = delete;
----

[.small]#link:#mrdocs-Expected-01-2constructor-0ce[_» more&period;&period;&period;_]#

Move&hyphen;construct from another reference Expected&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, R&gt;)
link:#mrdocs-Expected-01-2constructor-02c[Expected](link:#mrdocs-Expected-0a[Expected&lt;U&, E&gt;]&& other) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

[.small]#link:#mrdocs-Expected-01-2constructor-02c[_» more&period;&period;&period;_]#

Construct from an unexpected error (move)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;G, E&gt;)
link:#mrdocs-Expected-01-2constructor-0d[Expected](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

[.small]#link:#mrdocs-Expected-01-2constructor-0d[_» more&period;&period;&period;_]#

Invoke a factory to obtain the bound reference in&hyphen;place&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
explicit
link:#mrdocs-Expected-01-2constructor-025[Expected](
    &sol;&ast; implementation-defined &ast;&sol; tag,
    Fn&& fn);
----

[.small]#link:#mrdocs-Expected-01-2constructor-025[_» more&period;&period;&period;_]#

Bind in&hyphen;place to an existing lvalue&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
explicit
link:#mrdocs-Expected-01-2constructor-0c6[Expected](
    std::in&lowbar;place&lowbar;t tag,
    U& u) noexcept;
----

[.small]#link:#mrdocs-Expected-01-2constructor-0c6[_» more&period;&period;&period;_]#

Construct an unexpected state by invoking a factory&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
explicit
link:#mrdocs-Expected-01-2constructor-0b8[Expected](
    &sol;&ast; implementation-defined &ast;&sol; tag,
    Fn&& fn);
----

[.small]#link:#mrdocs-Expected-01-2constructor-0b8[_» more&period;&period;&period;_]#

Construct a disengaged Expected from error arguments&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Expected-01-2constructor-046[Expected](
    link:#mrdocs-unexpect_t[unexpect&lowbar;t] tag,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Expected-01-2constructor-046[_» more&period;&period;&period;_]#

Construct a disengaged Expected from an initializer list&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Expected-01-2constructor-05[Expected](
    link:#mrdocs-unexpect_t[unexpect&lowbar;t] tag,
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Expected-01-2constructor-05[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Source instance providing the lvalue&period;
| *u*
| Unexpected wrapper to copy&period;
| *fn*
| Callable that returns a bindable lvalue&period;
| *tag*
| Tag selecting in&hyphen;place construction&period;
| *args*
| Arguments forwarded to the error constructor&period;
| *il*
| Initializer list forwarded to the error constructor&period;
|===

Construct a disengaged Expected with no bound reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected() noexcept;
----

Copy&hyphen;construct from another reference Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected(link:#mrdocs-Expected-01[Expected] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Move&hyphen;construct from another reference Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Expected(link:#mrdocs-Expected-01[Expected]&& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Bind to an lvalue result, marking the expected engaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, Expected&gt;
             &amp;&amp; !std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt;
             &amp;&amp; !detail&colon;&colon;isUnexpected&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt; &amp;&amp; ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;)
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, R&gt;)
Expected(U& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The object to copy construct from
|===

Bind to the result stored inside another Expected value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, R&gt;)
Expected(link:#mrdocs-Expected-0a[Expected&lt;U, E&gt;]& other) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Source instance providing the lvalue&period;
|===

Copy&hyphen;construct from another reference Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, R&gt;)
Expected(link:#mrdocs-Expected-0a[Expected&lt;U&, E&gt;] const& other) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Source instance to bind to&period;
|===

Construct from an unexpected error (copy)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const G &amp;, E&gt;)
Expected(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, const G &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Unexpected wrapper to copy&period;
|===

Deleted&colon; binding a reference Expected from a temporary would dangle&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, Expected&gt;
             &amp;&amp; !std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt;
             &amp;&amp; !detail&colon;&colon;isUnexpected&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;
             &amp;&amp; !ok&lowbar;bind&lowbar;v&lt;U &amp;&amp;&gt;)
constexpr
Expected(U&& u) = delete;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Temporary value (deleted)&period;
|===

Deleted&colon; rebinding from a temporary Expected&lt;U, E&gt; would dangle&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
Expected(link:#mrdocs-Expected-0a[Expected&lt;U, E&gt;]&& value) = delete;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to move construct from
|===

Move&hyphen;construct from another reference Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, R&gt;)
Expected(link:#mrdocs-Expected-0a[Expected&lt;U&, E&gt;]&& other) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Source instance to bind to&period;
|===

Construct from an unexpected error (move)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;G, E&gt;)
Expected(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, G&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Unexpected wrapper to move from&period;
|===

Invoke a factory to obtain the bound reference in&hyphen;place&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
explicit
Expected(
    &sol;&ast; implementation-defined &ast;&sol; tag,
    Fn&& fn);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| Callable that returns a bindable lvalue&period;
| *tag*
| The object to construct from
|===

Bind in&hyphen;place to an existing lvalue&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
explicit
Expected(
    std::in&lowbar;place&lowbar;t tag,
    U& u) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *tag*
| Tag selecting in&hyphen;place construction&period;
| *u*
| Lvalue to bind this Expected to&period;
|===

Construct an unexpected state by invoking a factory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
explicit
Expected(
    &sol;&ast; implementation-defined &ast;&sol; tag,
    Fn&& fn);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| Callable that produces an error value&period;
| *tag*
| The object to construct from
|===

Construct a disengaged Expected from error arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;
constexpr
explicit
Expected(
    link:#mrdocs-unexpect_t[unexpect&lowbar;t] tag,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *tag*
| Tag selecting unexpected construction&period;
| *args*
| Arguments forwarded to the error constructor&period;
|===

Construct a disengaged Expected from an initializer list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
Expected(
    link:#mrdocs-unexpect_t[unexpect&lowbar;t] tag,
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *tag*
| Tag selecting unexpected construction&period;
| *il*
| Initializer list forwarded to the error constructor&period;
| *args*
| Additional arguments forwarded to the error constructor&period;
|===

Destroy the held error when disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
&#126;Expected();
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Copy&hyphen;assign, rebinding or copying the error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-05[operator&equals;](link:#mrdocs-Expected-01[Expected] const& other) = default;
----

[.small]#link:#mrdocs-Expected-01-operator_assign-05[_» more&period;&period;&period;_]#

Move&hyphen;assign, rebinding or moving the error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-07b[operator&equals;](link:#mrdocs-Expected-01[Expected]&& other) = default;
----

[.small]#link:#mrdocs-Expected-01-operator_assign-07b[_» more&period;&period;&period;_]#

Assign a new binding from an lvalue&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-081[operator&equals;](U& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt;);
----

[.small]#link:#mrdocs-Expected-01-operator_assign-081[_» more&period;&period;&period;_]#

Bind to the value contained in another Expected instance&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-0f[operator&equals;](link:#mrdocs-Expected-0a[Expected&lt;U, E&gt;]& other);
----

[.small]#link:#mrdocs-Expected-01-operator_assign-0f[_» more&period;&period;&period;_]#

Assign from another reference Expected (copy)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-00[operator&equals;](link:#mrdocs-Expected-0a[Expected&lt;U&, E&gt;] const& other);
----

[.small]#link:#mrdocs-Expected-01-operator_assign-00[_» more&period;&period;&period;_]#

Replace the stored state with an unexpected error (copy)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt;
             &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G const&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-07c[operator&equals;](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& e);
----

[.small]#link:#mrdocs-Expected-01-operator_assign-07c[_» more&period;&period;&period;_]#

Deleted&colon; rebinding from a temporary would dangle&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (!ok&lowbar;bind&lowbar;v&lt;U &amp;&amp;&gt;)
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-08c[operator&equals;](U&& u) = delete;
----

[.small]#link:#mrdocs-Expected-01-operator_assign-08c[_» more&period;&period;&period;_]#

Deleted&colon; cannot bind to a temporary Expected holding a value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-0e[operator&equals;](link:#mrdocs-Expected-0a[Expected&lt;U, E&gt;]&& value) = delete;
----

[.small]#link:#mrdocs-Expected-01-operator_assign-0e[_» more&period;&period;&period;_]#

Assign from another reference Expected (move)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-082[operator&equals;](link:#mrdocs-Expected-0a[Expected&lt;U&, E&gt;]&& other);
----

[.small]#link:#mrdocs-Expected-01-operator_assign-082[_» more&period;&period;&period;_]#

Replace the stored state with an unexpected error (move)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
link:#mrdocs-Expected-01-operator_assign-09[operator&equals;](link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& e);
----

[.small]#link:#mrdocs-Expected-01-operator_assign-09[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Source lvalue Expected to bind to&period;
| *e*
| Unexpected wrapper to copy from&period;
| *u*
| Temporary value (deleted)&period;
|===

Copy&hyphen;assign, rebinding or copying the error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(link:#mrdocs-Expected-01[Expected] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move&hyphen;assign, rebinding or moving the error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(link:#mrdocs-Expected-01[Expected]&& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Assign a new binding from an lvalue&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(U& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;R, U &amp;&gt;);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The object to copy assign from
|===

Bind to the value contained in another Expected instance&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(link:#mrdocs-Expected-0a[Expected&lt;U, E&gt;]& other);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Source lvalue Expected to bind to&period;
|===

Assign from another reference Expected (copy)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(link:#mrdocs-Expected-0a[Expected&lt;U&, E&gt;] const& other);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Source instance to bind to or copy error from&period;
|===

Replace the stored state with an unexpected error (copy)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G const&amp;&gt;
             &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G const&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;] const& e);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Unexpected wrapper to copy from&period;
|===

Deleted&colon; rebinding from a temporary would dangle&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (!ok&lowbar;bind&lowbar;v&lt;U &amp;&amp;&gt;)
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(U&& u) = delete;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Temporary value (deleted)&period;
|===

Deleted&colon; cannot bind to a temporary Expected holding a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(link:#mrdocs-Expected-0a[Expected&lt;U, E&gt;]&& value) = delete;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to move assign from
|===

Assign from another reference Expected (move)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires detail&colon;&colon;ok&lowbar;bind&lowbar;ref&lowbar;v&lt;R, U&amp;&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(link:#mrdocs-Expected-0a[Expected&lt;U&, E&gt;]&& other);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Source instance to bind to or move error from&period;
|===

Replace the stored state with an unexpected error (move)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, G&gt; &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;E&amp;, G&gt;
constexpr
link:#mrdocs-Expected-01[Expected]&
operator&equals;(link:#mrdocs-Unexpected-0c[Unexpected&lt;G&gt;]&& e);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Unexpected wrapper to move from&period;
|===

`and&lowbar;then` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Invoke `f` with the bound reference when engaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-and_then-03[and&lowbar;then](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-01-and_then-03[_» more&period;&period;&period;_]#

Invoke `f` with the bound reference when engaged (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-and_then-0d[and&lowbar;then](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-01-and_then-0d[_» more&period;&period;&period;_]#

Invoke `f` with the bound reference when engaged (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-and_then-09[and&lowbar;then](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-and_then-09[_» more&period;&period;&period;_]#

Invoke `f` with the bound reference when engaged (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-and_then-0c[and&lowbar;then](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-and_then-0c[_» more&period;&period;&period;_]#

== Return Value

Result of `f` or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation producing another Expected&period;
|===

Invoke `f` with the bound reference when engaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
and&lowbar;then(Fn&& f) &amp;;
----

== Return Value

Result of `f` or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation producing another Expected&period;
|===

Invoke `f` with the bound reference when engaged (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
and&lowbar;then(Fn&& f) const &amp;;
----

== Return Value

Result of `f` or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation producing another Expected&period;
|===

Invoke `f` with the bound reference when engaged (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
and&lowbar;then(Fn&& f) &amp;&amp;;
----

== Return Value

Result of `f` or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation producing another Expected&period;
|===

Invoke `f` with the bound reference when engaged (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
and&lowbar;then(Fn&& f) const &amp;&amp;;
----

== Return Value

Result of `f` or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Continuation producing another Expected&period;
|===

`emplace` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Rebind to a new lvalue, returning the stored reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
T&
link:#mrdocs-Expected-01-emplace-0d[emplace](U& u) noexcept;
----

[.small]#link:#mrdocs-Expected-01-emplace-0d[_» more&period;&period;&period;_]#

Deleted&colon; cannot bind reference Expected to a temporary&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (!ok&lowbar;bind&lowbar;v&lt;U &amp;&amp;&gt;)
constexpr
T&
link:#mrdocs-Expected-01-emplace-05e[emplace](U&& u) = delete;
----

[.small]#link:#mrdocs-Expected-01-emplace-05e[_» more&period;&period;&period;_]#

== Return Value

Bound reference&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Reference to bind to&period;
|===

Rebind to a new lvalue, returning the stored reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
T&
emplace(U& u) noexcept;
----

== Return Value

Bound reference&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Reference to bind to&period;
|===

Deleted&colon; cannot bind reference Expected to a temporary&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (!ok&lowbar;bind&lowbar;v&lt;U &amp;&amp;&gt;)
constexpr
T&
emplace(U&& u) = delete;
----

`error` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Access the stored error&semi; requires disengaged state&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E&
link:#mrdocs-Expected-01-error-0b[error]() &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-01-error-0b[_» more&period;&period;&period;_]#

Access the stored error (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E const&
link:#mrdocs-Expected-01-error-06[error]() const &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-01-error-06[_» more&period;&period;&period;_]#

Access the stored error (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E&&
link:#mrdocs-Expected-01-error-03[error]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-01-error-03[_» more&period;&period;&period;_]#

Access the stored error (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E const&&
link:#mrdocs-Expected-01-error-0c[error]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-01-error-0c[_» more&period;&period;&period;_]#

== Return Value

* Reference to the stored error&period;
* Rvalue reference to the stored error&period;

Access the stored error&semi; requires disengaged state&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E&
error() &amp; noexcept;
----

== Return Value

Reference to the stored error&period;

Access the stored error (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E const&
error() const &amp; noexcept;
----

== Return Value

Reference to the stored error&period;

Access the stored error (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E&&
error() &amp;&amp; noexcept;
----

== Return Value

Rvalue reference to the stored error&period;

Access the stored error (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E const&&
error() const &amp;&amp; noexcept;
----

== Return Value

Rvalue reference to the stored error&period;

`error&lowbar;or` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Return the stored error or the provided fallback (copy)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
link:#mrdocs-Expected-01-error_or-0c[error&lowbar;or](G&& g) const &amp;;
----

[.small]#link:#mrdocs-Expected-01-error_or-0c[_» more&period;&period;&period;_]#

Return the stored error or the provided fallback (move)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
link:#mrdocs-Expected-01-error_or-0f[error&lowbar;or](G&& g) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-error_or-0f[_» more&period;&period;&period;_]#

== Return Value

Error value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *g*
| Fallback error to return when engaged&period;
|===

Return the stored error or the provided fallback (copy)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
error&lowbar;or(G&& g) const &amp;;
----

== Return Value

Error value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *g*
| Fallback error to return when engaged&period;
|===

Return the stored error or the provided fallback (move)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class G = E&gt;
constexpr
E
error&lowbar;or(G&& g) &amp;&amp;;
----

== Return Value

Error value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *g*
| Fallback error to move when engaged&period;
|===

Check whether the Expected currently contains a reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
has&lowbar;value() const noexcept;
----

== Return Value

`true` if a reference is bound&period;

Dereference operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Dereference the bound reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&
link:#mrdocs-Expected-01-operator_star-00[operator&ast;]() &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-01-operator_star-00[_» more&period;&period;&period;_]#

Dereference the bound reference (const)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&
link:#mrdocs-Expected-01-operator_star-0c[operator&ast;]() const &amp; noexcept;
----

[.small]#link:#mrdocs-Expected-01-operator_star-0c[_» more&period;&period;&period;_]#

Dereference the bound reference, preserving value category&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&&
link:#mrdocs-Expected-01-operator_star-01[operator&ast;]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-01-operator_star-01[_» more&period;&period;&period;_]#

Dereference the bound reference, preserving value category (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&&
link:#mrdocs-Expected-01-operator_star-065[operator&ast;]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Expected-01-operator_star-065[_» more&period;&period;&period;_]#

== Return Value

Reference to the bound value&period;

Dereference the bound reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&
operator&ast;() &amp; noexcept;
----

== Return Value

Reference to the bound value&period;

Dereference the bound reference (const)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&
operator&ast;() const &amp; noexcept;
----

== Return Value

Reference to the bound value&period;

Dereference the bound reference, preserving value category&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&&
operator&ast;() &amp;&amp; noexcept;
----

== Return Value

Reference to the bound value&period;

Dereference the bound reference, preserving value category (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&&
operator&ast;() const &amp;&amp; noexcept;
----

== Return Value

Reference to the bound value&period;

Access the bound reference pointer&semi; undefined if disengaged&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Access the bound reference pointer&semi; undefined if disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T*
link:#mrdocs-Expected-01-operator_ptr-0c[operator&hyphen;&gt;]() noexcept;
----

[.small]#link:#mrdocs-Expected-01-operator_ptr-0c[_» more&period;&period;&period;_]#

Access the bound reference pointer&semi; undefined if disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const*
link:#mrdocs-Expected-01-operator_ptr-0b[operator&hyphen;&gt;]() const noexcept;
----

[.small]#link:#mrdocs-Expected-01-operator_ptr-0b[_» more&period;&period;&period;_]#

== Return Value

Pointer to the bound value&period;

Access the bound reference pointer&semi; undefined if disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T*
operator&hyphen;&gt;() noexcept;
----

== Return Value

Pointer to the bound value&period;

Access the bound reference pointer&semi; undefined if disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const*
operator&hyphen;&gt;() const noexcept;
----

== Return Value

Pointer to the bound value&period;

`or&lowbar;else` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Recover with `f` if disengaged, otherwise return this value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
link:#mrdocs-Expected-01[Expected]
link:#mrdocs-Expected-01-or_else-05[or&lowbar;else](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-01-or_else-05[_» more&period;&period;&period;_]#

Recover with `f` if disengaged (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
link:#mrdocs-Expected-01[Expected]
link:#mrdocs-Expected-01-or_else-00[or&lowbar;else](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-01-or_else-00[_» more&period;&period;&period;_]#

Recover with `f` if disengaged (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
link:#mrdocs-Expected-01[Expected]
link:#mrdocs-Expected-01-or_else-06[or&lowbar;else](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-or_else-06[_» more&period;&period;&period;_]#

Recover with `f` if disengaged (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
link:#mrdocs-Expected-01[Expected]
link:#mrdocs-Expected-01-or_else-09[or&lowbar;else](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-or_else-09[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Recover with `f` if disengaged, otherwise return this value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
link:#mrdocs-Expected-01[Expected]
or&lowbar;else(Fn&& f) &amp;;
----

== Return Value

Expected specialization for lvalue references&period; Holds either a bound reference to `T` or an unexpected error `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Recover with `f` if disengaged (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
link:#mrdocs-Expected-01[Expected]
or&lowbar;else(Fn&& f) const &amp;;
----

== Return Value

Expected specialization for lvalue references&period; Holds either a bound reference to `T` or an unexpected error `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Recover with `f` if disengaged (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
link:#mrdocs-Expected-01[Expected]
or&lowbar;else(Fn&& f) &amp;&amp;;
----

== Return Value

Expected specialization for lvalue references&period; Holds either a bound reference to `T` or an unexpected error `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Recover with `f` if disengaged (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
link:#mrdocs-Expected-01[Expected]
or&lowbar;else(Fn&& f) const &amp;&amp;;
----

== Return Value

Expected specialization for lvalue references&period; Holds either a bound reference to `T` or an unexpected error `E`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Recovery function returning an Expected&period;
|===

Swap state with another reference Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(link:#mrdocs-Expected-01[Expected]& x) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;E&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;swappable&lowbar;v&lt;E &amp;&gt;)
requires std&colon;&colon;is&lowbar;swappable&lowbar;v&lt;E&gt;;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| Other instance to exchange with&period;
|===

`transform` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Transform the bound value when engaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-transform-081[transform](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-01-transform-081[_» more&period;&period;&period;_]#

Transform the bound value when engaged (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-transform-00[transform](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-01-transform-00[_» more&period;&period;&period;_]#

Transform the bound value when engaged (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-transform-03[transform](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-transform-03[_» more&period;&period;&period;_]#

Transform the bound value when engaged (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-transform-085[transform](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-transform-085[_» more&period;&period;&period;_]#

== Return Value

Expected containing transformed value or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the bound reference&period;
|===

Transform the bound value when engaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform(Fn&& f) &amp;;
----

== Return Value

Expected containing transformed value or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the bound reference&period;
|===

Transform the bound value when engaged (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform(Fn&& f) const &amp;;
----

== Return Value

Expected containing transformed value or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the bound reference&period;
|===

Transform the bound value when engaged (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform(Fn&& f) &amp;&amp;;
----

== Return Value

Expected containing transformed value or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the bound reference&period;
|===

Transform the bound value when engaged (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform(Fn&& f) const &amp;&amp;;
----

== Return Value

Expected containing transformed value or current error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the bound reference&period;
|===

`transform&lowbar;error` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Transform the stored error when disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-transform_error-067[transform&lowbar;error](Fn&& f) &amp;;
----

[.small]#link:#mrdocs-Expected-01-transform_error-067[_» more&period;&period;&period;_]#

Transform the stored error when disengaged (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-transform_error-0e[transform&lowbar;error](Fn&& f) const &amp;;
----

[.small]#link:#mrdocs-Expected-01-transform_error-0e[_» more&period;&period;&period;_]#

Transform the stored error when disengaged (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-transform_error-02[transform&lowbar;error](Fn&& f) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-transform_error-02[_» more&period;&period;&period;_]#

Transform the stored error when disengaged (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
link:#mrdocs-Expected-01-transform_error-064[transform&lowbar;error](Fn&& f) const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-transform_error-064[_» more&period;&period;&period;_]#

== Return Value

Expected with transformed error or current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the error&period;
|===

Transform the stored error when disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) &amp;;
----

== Return Value

Expected with transformed error or current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the error&period;
|===

Transform the stored error when disengaged (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) const &amp;;
----

== Return Value

Expected with transformed error or current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the error&period;
|===

Transform the stored error when disengaged (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) &amp;&amp;;
----

== Return Value

Expected with transformed error or current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the error&period;
|===

Transform the stored error when disengaged (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Fn&gt;
constexpr
auto
transform&lowbar;error(Fn&& f) const &amp;&amp;;
----

== Return Value

Expected with transformed error or current value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Transformation applied to the error&period;
|===

`value` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Return the bound reference or throw on disengaged state&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T&
link:#mrdocs-Expected-01-value-0a0[value]() &amp;;
----

[.small]#link:#mrdocs-Expected-01-value-0a0[_» more&period;&period;&period;_]#

Return the bound reference or throw on disengaged state (const lvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T const&
link:#mrdocs-Expected-01-value-0c[value]() const &amp;;
----

[.small]#link:#mrdocs-Expected-01-value-0c[_» more&period;&period;&period;_]#

Return the bound reference or throw on disengaged state (rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T&&
link:#mrdocs-Expected-01-value-05[value]() &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-value-05[_» more&period;&period;&period;_]#

Return the bound reference or throw on disengaged state (const rvalue)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T const&&
link:#mrdocs-Expected-01-value-0a2[value]() const &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-value-0a2[_» more&period;&period;&period;_]#

Return the bound reference or throw on disengaged state&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T&
value() &amp;;
----

== Return Value

the bound reference or throw on disengaged state&period;

Return the bound reference or throw on disengaged state (const lvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T const&
value() const &amp;;
----

== Return Value

the bound reference or throw on disengaged state (const lvalue)&period;

Return the bound reference or throw on disengaged state (rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T&&
value() &amp;&amp;;
----

== Return Value

the bound reference or throw on disengaged state (rvalue)&period;

Return the bound reference or throw on disengaged state (const rvalue)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
T const&&
value() const &amp;&amp;;
----

== Return Value

the bound reference or throw on disengaged state (const rvalue)&period;

`value&lowbar;or` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Return the bound value or a fallback copy when disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
std::remove&lowbar;reference&lowbar;t&lt;T&gt;
link:#mrdocs-Expected-01-value_or-05[value&lowbar;or](U&& u) const &amp;;
----

[.small]#link:#mrdocs-Expected-01-value_or-05[_» more&period;&period;&period;_]#

Return the bound value or a fallback move when disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
std::remove&lowbar;reference&lowbar;t&lt;T&gt;
link:#mrdocs-Expected-01-value_or-0d[value&lowbar;or](U&& u) &amp;&amp;;
----

[.small]#link:#mrdocs-Expected-01-value_or-0d[_» more&period;&period;&period;_]#

== Return Value

* Bound value or fallback copy&period;
* Bound value or fallback&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Fallback value to return if no reference is bound&period;
|===

Return the bound value or a fallback copy when disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
std::remove&lowbar;reference&lowbar;t&lt;T&gt;
value&lowbar;or(U&& u) const &amp;;
----

== Return Value

Bound value or fallback copy&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Fallback value to return if no reference is bound&period;
|===

Return the bound value or a fallback move when disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
std::remove&lowbar;reference&lowbar;t&lt;T&gt;
value&lowbar;or(U&& u) &amp;&amp;;
----

== Return Value

Bound value or fallback&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Fallback value to move if no reference is bound&period;
|===

Return true when a reference is bound&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit
operator bool() const noexcept;
----

== Return Value

true when a reference is bound&period;

Pointer to the referenced value when engaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
T* p&lowbar;;
----

Stored unexpected error when disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
E unex&lowbar;;
----

Stores only the operand of the explicit&hyphen;specifier or noexcept&hyphen;specifier as a string&period; The complete expression is not preserved at this time&period; This is a temporary design and may be improved in the future&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ExplicitInfo;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExplicitInfo-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare explicit&hyphen;specifier info&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExplicitInfo-Implicit[`Implicit`] 
| Whether an explicit&hyphen;specifier was user&hyphen;written&period;
| link:#mrdocs-ExplicitInfo-Kind[`Kind`] 
| The evaluated exception specification&period;
| link:#mrdocs-ExplicitInfo-Operand[`Operand`] 
| The operand of the explicit&hyphen;specifier, if any&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-082[`toString`]
| Convert ExplicitInfo to a string&period;
|===

Compare explicit&hyphen;specifier info&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
operator&lt;&equals;&gt;(link:#mrdocs-ExplicitInfo[ExplicitInfo] const& rhs) const = default;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

Whether an explicit&hyphen;specifier was user&hyphen;written&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool Implicit = true;
----

The evaluated exception specification&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExplicitKind[ExplicitKind] Kind = ExplicitKind&colon;&colon;False;
----

The operand of the explicit&hyphen;specifier, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string Operand;
----

Represents an expression

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ExprInfo;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExprInfo-asExpr-00[`asExpr`] 
| View this object as its base expression&period;
| link:#mrdocs-ExprInfo-operator_3way[`operator&lt;&equals;&gt;`] 
| Order expressions by written form&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ExprInfo-Written[`Written`] 
| The expression, as written
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-merge-05[`merge`]
| Merge metadata from another expression&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-ConstantExprInfo[`ConstantExprInfo`]
| Represents an expression with a (possibly known) value
|===

View this object as its base expression&period;

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

View this object as its base expression&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo]&
link:#mrdocs-ExprInfo-asExpr-08[asExpr]() noexcept;
----

[.small]#link:#mrdocs-ExprInfo-asExpr-08[_» more&period;&period;&period;_]#

View this object as its base expression&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo] const&
link:#mrdocs-ExprInfo-asExpr-0d[asExpr]() const noexcept;
----

[.small]#link:#mrdocs-ExprInfo-asExpr-0d[_» more&period;&period;&period;_]#

View this object as its base expression&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo]&
asExpr() noexcept;
----

== Return Value

Represents an expression

View this object as its base expression&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo] const&
asExpr() const noexcept;
----

== Return Value

Represents an expression

Order expressions by written form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
operator&lt;&equals;&gt;(link:#mrdocs-ExprInfo[ExprInfo] const& rhs) const = default;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

The expression, as written

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string Written;
----

A format string with source location&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
struct FormatString;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-FormatString-2constructor[`FormatString`]         [.small]#[constructor]#
| Capture a format string and its originating location&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-FormatString-fs[`fs`] 
| Format string view&period;
| link:#mrdocs-FormatString-loc[`loc`] 
| Originating source location for diagnostics&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-formatError[`formatError`]
| Return a formatted error&period;
|===

Capture a format string and its originating location&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
FormatString(
    T const& fs&lowbar;,
    std::source&lowbar;location loc&lowbar; = source&lowbar;location&colon;&colon;current());
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fs&lowbar;*
| The format string to copy&period;
| *loc&lowbar;*
| Source location where formatting is requested&period;
|===

Format string view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view fs;
----

Originating source location for diagnostics&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::source&lowbar;location loc;
----

Info for friend declarations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Friend&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct FriendInfo final
----

== Description

* Friendship is not transitive
* Friendship is not inherited
* Access specifiers do not affect the meaning of friend declarations

The friends of a record are stored directly in the record&apos;s metadata&period;

If the friend declaration is documented, the documentation is stored in the befriended symbol&apos;s metadata rather than in the relationship&period;

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-FriendInfo-Type[`Type`] 
| Befriended type&period;
| link:#mrdocs-FriendInfo-id[`id`] 
| Befriended symbol&period;
|===

Befriended type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Friend&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Type&gt;&gt;] Type = std&colon;&colon;nullopt;
----

== Description

This member is nullable and only used when befriending a type&period;

Befriended symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Friend&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] id = &equals; SymbolID&colon;&colon;invalid;
----

Metadata for a function or method&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct FunctionSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Function&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Function&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-FunctionSymbol-2constructor[`FunctionSymbol`]         [.small]#[constructor]#
| Construct a function symbol with its ID&period;
| link:#mrdocs-FunctionSymbol-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare functions by signature, qualifiers, and metadata&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-FunctionSymbol-isConcept[`isConcept`] 
| link:#mrdocs-FunctionSymbol-isEnum[`isEnum`] 
| link:#mrdocs-FunctionSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-FunctionSymbol-isFunction[`isFunction`] 
| link:#mrdocs-FunctionSymbol-isGuide[`isGuide`] 
| link:#mrdocs-FunctionSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-FunctionSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-FunctionSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-FunctionSymbol-isRecord[`isRecord`] 
| link:#mrdocs-FunctionSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-FunctionSymbol-isUsing[`isUsing`] 
| link:#mrdocs-FunctionSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-FunctionSymbol-Attributes[`Attributes`] 
| Collected attributes attached to the declaration&period;
| link:#mrdocs-FunctionSymbol-Constexpr[`Constexpr`] 
| constexpr&sol;consteval specifier&period;
| link:#mrdocs-FunctionSymbol-Explicit[`Explicit`] 
| explicit&hyphen;specifier information&period;
| link:#mrdocs-FunctionSymbol-FuncClass[`FuncClass`] 
| The class of function this is
| link:#mrdocs-FunctionSymbol-FunctionObjectImpl[`FunctionObjectImpl`] 
| Back&hyphen;reference to the function object implementation type&period;
| link:#mrdocs-FunctionSymbol-HasOverrideAttr[`HasOverrideAttr`] 
| True when annotated with override&period;
| link:#mrdocs-FunctionSymbol-HasTrailingReturn[`HasTrailingReturn`] 
| True when using a trailing return type&period;
| link:#mrdocs-FunctionSymbol-IsConst[`IsConst`] 
| True when qualified const&period;
| link:#mrdocs-FunctionSymbol-IsDefaulted[`IsDefaulted`] 
| True when this declaration is implicitly defaulted&period;
| link:#mrdocs-FunctionSymbol-IsDeleted[`IsDeleted`] 
| True when this declaration is deleted&period;
| link:#mrdocs-FunctionSymbol-IsDeletedAsWritten[`IsDeletedAsWritten`] 
| True when deleted as written (vs deduced)&period;
| link:#mrdocs-FunctionSymbol-IsExplicitObjectMemberFunction[`IsExplicitObjectMemberFunction`] 
| True when explicit object parameter syntax is used&period;
| link:#mrdocs-FunctionSymbol-IsExplicitlyDefaulted[`IsExplicitlyDefaulted`] 
| True when explicitly defaulted with `&equals; default`&period;
| link:#mrdocs-FunctionSymbol-IsFinal[`IsFinal`] 
| True when final&hyphen;qualified&period;
| link:#mrdocs-FunctionSymbol-IsNoReturn[`IsNoReturn`] 
| True when marked &lsqb;&lsqb;noreturn&rsqb;&rsqb;or equivalent&period;
| link:#mrdocs-FunctionSymbol-IsNodiscard[`IsNodiscard`] 
| True when declared &lsqb;&lsqb;nodiscard&rsqb;&rsqb;&period;
| link:#mrdocs-FunctionSymbol-IsPure[`IsPure`] 
| True when the function is pure virtual&period;
| link:#mrdocs-FunctionSymbol-IsRecordMethod[`IsRecordMethod`] 
| True when this is a non&hyphen;static member function&period;
| link:#mrdocs-FunctionSymbol-IsVariadic[`IsVariadic`] 
| True when the function is variadic&period;
| link:#mrdocs-FunctionSymbol-IsVirtual[`IsVirtual`] 
| True when declared virtual (after overrides)&period;
| link:#mrdocs-FunctionSymbol-IsVirtualAsWritten[`IsVirtualAsWritten`] 
| True when explicitly written virtual&period;
| link:#mrdocs-FunctionSymbol-IsVolatile[`IsVolatile`] 
| True when qualified volatile&period;
| link:#mrdocs-FunctionSymbol-Noexcept[`Noexcept`] 
| Exception specification for the function&period;
| link:#mrdocs-FunctionSymbol-OverloadedOperator[`OverloadedOperator`] 
| Overloaded operator kind, if any&period;
| link:#mrdocs-FunctionSymbol-Params[`Params`] 
| List of parameters&period;
| link:#mrdocs-FunctionSymbol-RefQualifier[`RefQualifier`] 
| Reference qualifier on the member function, if any&period;
| link:#mrdocs-FunctionSymbol-Requires[`Requires`] 
| Constrained requires&hyphen;clause if present&period;
| link:#mrdocs-FunctionSymbol-ReturnType[`ReturnType`] 
| Info about the return type of this function&period;
| link:#mrdocs-FunctionSymbol-StorageClass[`StorageClass`] 
| Storage class specifier&period;
| link:#mrdocs-FunctionSymbol-Template[`Template`] 
| When present, this function is a template or specialization&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-FunctionSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
| link:#mrdocs-isCopyAssignment[`isCopyAssignment`]
| Check whether a function is a copy assignment operator&period;
| link:#mrdocs-isCopyConstructor[`isCopyConstructor`]
| Check whether a function is a copy constructor&period;
| link:#mrdocs-isDefaultConstructor[`isDefaultConstructor`]
| Check whether a function is a default constructor&period;
| link:#mrdocs-isMoveAssignment[`isMoveAssignment`]
| Check whether a function is a move assignment operator&period;
| link:#mrdocs-isMoveConstructor[`isMoveConstructor`]
| Check whether a function is a move constructor&period;
| link:#mrdocs-isSpecialMemberFunction[`isSpecialMemberFunction`]
| Check whether a function is a special member function&period;
| link:#mrdocs-overrides[`overrides`]
| Determine if one function would override the other
|===

Construct a function symbol with its ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
FunctionSymbol(link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to copy construct from
|===

Compare functions by signature, qualifiers, and metadata&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-FunctionSymbol[FunctionSymbol] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

Collected attributes attached to the declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; Attributes;
----

constexpr&sol;consteval specifier&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ConstexprKind[ConstexprKind] Constexpr = ConstexprKind&colon;&colon;None;
----

explicit&hyphen;specifier information&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExplicitInfo[ExplicitInfo] Explicit;
----

The class of function this is

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-FunctionClass[FunctionClass] FuncClass = FunctionClass&colon;&colon;Normal;
----

Back&hyphen;reference to the function object implementation type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;SymbolID&gt;] FunctionObjectImpl;
----

== Description

When set, this function was synthesized from a function object variable&colon; the function does not participate in ADL and taking its address is undefined behavior&period;

True when annotated with override&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool HasOverrideAttr = false;
----

True when using a trailing return type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool HasTrailingReturn = false;
----

True when qualified const&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsConst = false;
----

True when this declaration is implicitly defaulted&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsDefaulted = false;
----

True when this declaration is deleted&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsDeleted = false;
----

True when deleted as written (vs deduced)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsDeletedAsWritten = false;
----

True when explicit object parameter syntax is used&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsExplicitObjectMemberFunction = false;
----

True when explicitly defaulted with `&equals; default`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsExplicitlyDefaulted = false;
----

True when final&hyphen;qualified&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsFinal = false;
----

True when marked &lsqb;&lsqb;noreturn&rsqb;&rsqb;or equivalent&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsNoReturn = false;
----

True when declared &lsqb;&lsqb;nodiscard&rsqb;&rsqb;&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsNodiscard = false;
----

True when the function is pure virtual&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsPure = false;
----

True when this is a non&hyphen;static member function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsRecordMethod = false;
----

True when the function is variadic&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsVariadic = false;
----

True when declared virtual (after overrides)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsVirtual = false;
----

True when explicitly written virtual&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsVirtualAsWritten = false;
----

True when qualified volatile&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsVolatile = false;
----

Exception specification for the function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-NoexceptInfo[NoexceptInfo] Noexcept;
----

Overloaded operator kind, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OperatorKind[OperatorKind] OverloadedOperator = OperatorKind&colon;&colon;None;
----

List of parameters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Param&gt; Params;
----

Reference qualifier on the member function, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ReferenceKind[ReferenceKind] RefQualifier = ReferenceKind&colon;&colon;None;
----

Constrained requires&hyphen;clause if present&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo] Requires;
----

Info about the return type of this function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] ReturnType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Description

If the function has a deduced return type, this contains `auto` to indicate that&period;

By default, we also use `auto` in the member to indicate an unknown return type&period;

Storage class specifier&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-StorageClassKind[StorageClassKind] StorageClass = StorageClassKind&colon;&colon;None;
----

When present, this function is a template or specialization&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;TemplateInfo&gt;] Template;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

Function type with parameters, qualifiers, and noexcept info&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FunctionType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct FunctionType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Function&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Function&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-FunctionType-isArray[`isArray`] 
| link:#mrdocs-FunctionType-isAuto[`isAuto`] 
| link:#mrdocs-FunctionType-isDecltype[`isDecltype`] 
| link:#mrdocs-FunctionType-isFunction[`isFunction`] 
| link:#mrdocs-FunctionType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-FunctionType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-FunctionType-isNamed[`isNamed`] 
| link:#mrdocs-FunctionType-isPointer[`isPointer`] 
| link:#mrdocs-FunctionType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-FunctionType-ExceptionSpec[`ExceptionSpec`] 
| Exception specification information&period;
| link:#mrdocs-FunctionType-IsVariadic[`IsVariadic`] 
| True when this function type is variadic&period;
| link:#mrdocs-FunctionType-ParamTypes[`ParamTypes`] 
| Parameter types in declaration order&period;
| link:#mrdocs-FunctionType-RefQualifier[`RefQualifier`] 
| Reference qualifier (if present)&period;
| link:#mrdocs-FunctionType-ReturnType[`ReturnType`] 
| Return type, defaults to `auto` when unknown&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-FunctionType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

Exception specification information&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FunctionType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-NoexceptInfo[NoexceptInfo] ExceptionSpec;
----

True when this function type is variadic&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FunctionType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsVariadic = false;
----

Parameter types in declaration order&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FunctionType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Polymorphic&lt;Type&gt;&gt; ParamTypes;
----

Reference qualifier (if present)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FunctionType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ReferenceKind[ReferenceKind] RefQualifier = ReferenceKind&colon;&colon;None;
----

Return type, defaults to `auto` when unknown&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FunctionType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] ReturnType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

Base class for documentation generators&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Generator;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Generator-2destructor[`&#126;Generator`] [.small]#[destructor]# [.small]#[virtual]#
| Destructor&period;
| link:#mrdocs-Generator-build-0b[`build`] 
| Build reference documentation for the corpus&period;
| link:#mrdocs-Generator-buildOne-0f[`buildOne`] 
| `buildOne` overloads
| link:#mrdocs-Generator-buildOneString[`buildOneString`] 
| Build the reference as a single page to a string&period;
| link:#mrdocs-Generator-displayName[`displayName`]  [.small]#[virtual]#
| Return the display name of the generator&period;
| link:#mrdocs-Generator-fileExtension[`fileExtension`]  [.small]#[virtual]#
| Return the extension or tag of the generator&period;
| link:#mrdocs-Generator-id[`id`]  [.small]#[virtual]#
| Return the symbolic name of the generator&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-findGenerator[`findGenerator`]
| Find a generator by its id&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
&#126;Generator() noexcept;
----

Build reference documentation for the corpus&period;

== Synopses

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

Build reference documentation for the corpus&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-Generator-build-00[build](link:#mrdocs-Corpus[Corpus] const& corpus) const;
----

[.small]#link:#mrdocs-Generator-build-00[_» more&period;&period;&period;_]#

Build reference documentation for the corpus&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-Generator-build-0d[build](
    std::string&lowbar;view outputPath,
    link:#mrdocs-Corpus[Corpus] const& corpus) const;
----

[.small]#link:#mrdocs-Generator-build-0d[_» more&period;&period;&period;_]#

== Return Value

The error, if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *corpus*
| The symbols to emit&period; The generator may modify the contents of the object before returning&period;
| *outputPath*
| A directory or filename&period;
|===

Build reference documentation for the corpus&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
build(link:#mrdocs-Corpus[Corpus] const& corpus) const;
----

== Description

This function invokes the generator to emit the documentation using the corpus configuration options to determine the output location&period;

== Return Value

The error, if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *corpus*
| The symbols to emit&period; The generator may modify the contents of the object before returning&period;
|===

Build reference documentation for the corpus&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
build(
    std::string&lowbar;view outputPath,
    link:#mrdocs-Corpus[Corpus] const& corpus) const;
----

== Description

This function invokes the generator to emit the documentation using `outputPath` as a parameter indicating where the output should go&period; This can be a directory or a filename depending on the generator and how it is configured&period;

The default implentation assumes the output is single&hyphen;page and emits the file `reference&period;ext` using link:#mrdocs-Generator-buildOne-0f[`buildOne`] to generate the content&period;

The typical implementation will have behavior similar to the default implementation if the output is single&hyphen;page, or will iterate over the symbols in the corpus to generate multiple files if the output is multi&hyphen;page&period;

== Return Value

The error, if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *outputPath*
| A directory or filename&period;
| *corpus*
| The symbols to emit&period; The generator may modify the contents of the object before returning&period;
|===

`buildOne` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

Build the reference as a single page to a file&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-Generator-buildOne-03[buildOne](
    std::string&lowbar;view fileName,
    link:#mrdocs-Corpus[Corpus] const& corpus) const;
----

[.small]#link:#mrdocs-Generator-buildOne-03[_» more&period;&period;&period;_]#

Build reference documentation for the corpus&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-Generator-buildOne-07[buildOne](
    std::ostream& os,
    link:#mrdocs-Corpus[Corpus] const& corpus) const = 0;
----

[.small]#link:#mrdocs-Generator-buildOne-07[_» more&period;&period;&period;_]#

== Return Value

The error, if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fileName*
| The file to write&period; If the file already exists, it will be overwritten&period;
| *corpus*
| The metadata to emit&period;
| *os*
| The stream to write to&period;
|===

Build the reference as a single page to a file&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
buildOne(
    std::string&lowbar;view fileName,
    link:#mrdocs-Corpus[Corpus] const& corpus) const;
----

== Thread Safety

* Different `corpus` object&colon; may be called concurrently&period;
* Same `corpus` object&colon; may not be called concurrently&period;

== Return Value

The error, if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fileName*
| The file to write&period; If the file already exists, it will be overwritten&period;
| *corpus*
| The metadata to emit&period;
|===

Build reference documentation for the corpus&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
buildOne(
    std::ostream& os,
    link:#mrdocs-Corpus[Corpus] const& corpus) const = 0;
----

== Description

This function invokes the generator to emit the full documentation to an output stream, as a single entity&period;

== Thread Safety

* Different `corpus` object&colon; may be called concurrently&period;
* Same `corpus` object&colon; may not be called concurrently&period;

== Return Value

The error, if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The stream to write to&period;
| *corpus*
| The metadata to emit&period;
|===

Build the reference as a single page to a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
buildOneString(
    std::string& dest,
    link:#mrdocs-Corpus[Corpus] const& corpus) const;
----

== Return Value

The error, if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dest*
| The string to hold the result&period; For the duration of the call, this must not be accessed by any other threads&period;
| *corpus*
| The metadata to emit&period;
|===

Return the display name of the generator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
std::string&lowbar;view
displayName() const noexcept = 0;
----

== Return Value

the display name of the generator&period;

Return the extension or tag of the generator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
std::string&lowbar;view
fileExtension() const noexcept = 0;
----

== Description

This should be in all lower case&period; Examples of tags are&colon;

* &quot;adoc&quot; Asciidoctor
* &quot;xml&quot; XML
* &quot;html&quot; HTML

The returned string should not include a leading period&period;

== Return Value

the extension or tag of the generator&period;

Return the symbolic name of the generator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
std::string&lowbar;view
id() const noexcept = 0;
----

== Description

This is a short, unique string which identifies the generator in command line options and in configuration files&period;

== Return Value

the symbolic name of the generator&period;

A glob pattern matcher

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class GlobPattern;
----

== Description

* &quot;&ast;&quot; matches all characters except delimiters&period;
* &quot;&ast;&ast;&quot; matches all characters
* &quot;?&quot; matches any single character&period;
* &quot;&lsqb;&lt;chars&gt;&rsqb;&quot; matches one character in the bracket&period;
* &quot;&lsqb;&lt;char&gt;&hyphen;&lt;char&gt;&rsqb;&quot; matches one character in the bracket range&period;
* &quot;&lsqb;&rsqb;&quot; or &quot;&lsqb;!&lt;chars&gt;&rsqb;&quot; matches one character not in the bracket&period;
* &quot;&lcub;&lt;glob&gt;,&period;&period;&period;&rcub;&quot; matches one of the globs in the list&period;
* &quot;&quot; escapes the next character so it is treated as a literal&period;

Nested brace expansions &quot;&lcub;&lt;glob&gt;,&quot;&lcub;&lt;glob&gt;,&period;&period;&period;&rcub;&quot;,&period;&period;&period;&rcub;&quot; are not supported&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-GlobPattern-2constructor-02[`GlobPattern`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-GlobPattern-2destructor[`&#126;GlobPattern`] [.small]#[destructor]#
| Destructor
| link:#mrdocs-GlobPattern-operator_assign-0fa1[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-GlobPattern-isLiteral[`isLiteral`] 
| Checks if the glob pattern is a literal string&period;
| link:#mrdocs-GlobPattern-match[`match`] 
| Matches the given string against the glob pattern&period;
| link:#mrdocs-GlobPattern-matchPatternPrefix[`matchPatternPrefix`] 
| Matches the start of a given string against the glob pattern&period;
| link:#mrdocs-GlobPattern-pattern[`pattern`] 
| Returns the glob pattern&period;
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-GlobPattern-create-089[`create`] 
| `create` overloads
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

Construct an empty GlobPattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-GlobPattern-2constructor-07[GlobPattern]();
----

[.small]#link:#mrdocs-GlobPattern-2constructor-07[_» more&period;&period;&period;_]#

Copy constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-GlobPattern-2constructor-00[GlobPattern](link:#mrdocs-GlobPattern[GlobPattern] const& other);
----

[.small]#link:#mrdocs-GlobPattern-2constructor-00[_» more&period;&period;&period;_]#

Move constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-GlobPattern-2constructor-0d[GlobPattern](link:#mrdocs-GlobPattern[GlobPattern]&& other) noexcept;
----

[.small]#link:#mrdocs-GlobPattern-2constructor-0d[_» more&period;&period;&period;_]#

Construct an empty GlobPattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
GlobPattern();
----

== Description

An empty GlobPattern will never match any string&period;

Copy constructor

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
GlobPattern(link:#mrdocs-GlobPattern[GlobPattern] const& other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Move constructor

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
GlobPattern(link:#mrdocs-GlobPattern[GlobPattern]&& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Destructor

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;GlobPattern();
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

Copy assignment


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-GlobPattern[GlobPattern]&
link:#mrdocs-GlobPattern-operator_assign-0ff[operator&equals;](link:#mrdocs-GlobPattern[GlobPattern] const& other);
----

[.small]#link:#mrdocs-GlobPattern-operator_assign-0ff[_» more&period;&period;&period;_]#

Move assignment


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-GlobPattern[GlobPattern]&
link:#mrdocs-GlobPattern-operator_assign-0fa5[operator&equals;](link:#mrdocs-GlobPattern[GlobPattern]&& other) noexcept;
----

[.small]#link:#mrdocs-GlobPattern-operator_assign-0fa5[_» more&period;&period;&period;_]#

Copy assignment

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-GlobPattern[GlobPattern]&
operator&equals;(link:#mrdocs-GlobPattern[GlobPattern] const& other);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move assignment

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-GlobPattern[GlobPattern]&
operator&equals;(link:#mrdocs-GlobPattern[GlobPattern]&& other) noexcept;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Checks if the glob pattern is a literal string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isLiteral() const;
----

== Description

This function determines if the glob pattern does not contain any special characters&period; In other words, it matches a single string&period;

== Return Value

true if the glob pattern is a literal string, false otherwise&period;

Matches the given string against the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
match(
    std::string&lowbar;view str,
    char delimiter) const;
----

== Return Value

true if the string matches the pattern, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to match against the pattern&period;
| *delimiter*
| The character that `&ast;` does not match&period;
|===

Matches the start of a given string against the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
matchPatternPrefix(
    std::string&lowbar;view prefix,
    char delimiter) const;
----

== Description

This function determines if the given string with the specified `prefix` can potentially match the glob pattern&period;

If the string matches the start of the pattern without failure, even if there are characters left in the string or the pattern, the function returns true&period;

== Return Value

true if the string prefix matches the pattern, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *prefix*
| The string to match against the pattern&period;
| *delimiter*
| The character that `&ast;` does not match&period;
|===

Returns the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
pattern() const;
----

== Return Value

The glob pattern as a string view&period;

`create` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

Create a glob pattern without limiting subpattern count&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;GlobPattern&gt;]
link:#mrdocs-GlobPattern-create-05[create](std::string&lowbar;view pattern);
----

[.small]#link:#mrdocs-GlobPattern-create-05[_» more&period;&period;&period;_]#

Constructs a GlobPattern with the given pattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;GlobPattern&gt;]
link:#mrdocs-GlobPattern-create-08f[create](
    std::string&lowbar;view pattern,
    link:#mrdocs-Optional-03[Optional&lt;std::size&lowbar;t&gt;] maxSubGlobs);
----

[.small]#link:#mrdocs-GlobPattern-create-08f[_» more&period;&period;&period;_]#

== Return Value

* Compiled pattern or an error&period;
* The constructed GlobPattern, or an error if the pattern is invalid&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| Glob expression to compile&period;
| *maxSubGlobs*
| The maximum number of subpatterns allowed&period; If the pattern contains more subpatterns than this value, an error is returned&period; If not specified, there is no limit&period;
|===

Create a glob pattern without limiting subpattern count&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;GlobPattern&gt;]
create(std::string&lowbar;view pattern);
----

== Return Value

Compiled pattern or an error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| Glob expression to compile&period;
|===

Constructs a GlobPattern with the given pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;GlobPattern&gt;]
create(
    std::string&lowbar;view pattern,
    link:#mrdocs-Optional-03[Optional&lt;std::size&lowbar;t&gt;] maxSubGlobs);
----

== Return Value

The constructed GlobPattern, or an error if the pattern is invalid&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| The glob pattern to use for matching&period;
| *maxSubGlobs*
| The maximum number of subpatterns allowed&period; If the pattern contains more subpatterns than this value, an error is returned&period; If not specified, there is no limit&period;
|===

Info for deduction guides&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Guide&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct GuideSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Guide&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Guide&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-GuideSymbol-2constructor[`GuideSymbol`]         [.small]#[constructor]#
| Construct a deduction guide symbol with its ID&period;
| link:#mrdocs-GuideSymbol-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare guides by params&sol;deduced&sol;template&sol;explicit&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-GuideSymbol-isConcept[`isConcept`] 
| link:#mrdocs-GuideSymbol-isEnum[`isEnum`] 
| link:#mrdocs-GuideSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-GuideSymbol-isFunction[`isFunction`] 
| link:#mrdocs-GuideSymbol-isGuide[`isGuide`] 
| link:#mrdocs-GuideSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-GuideSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-GuideSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-GuideSymbol-isRecord[`isRecord`] 
| link:#mrdocs-GuideSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-GuideSymbol-isUsing[`isUsing`] 
| link:#mrdocs-GuideSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-GuideSymbol-Deduced[`Deduced`] 
| The pattern for the deduced specialization&period;
| link:#mrdocs-GuideSymbol-Explicit[`Explicit`] 
| The explicit&hyphen;specifier, if any&period;
| link:#mrdocs-GuideSymbol-Params[`Params`] 
| The parameters of the deduction guide&period;
| link:#mrdocs-GuideSymbol-Template[`Template`] 
| Template head, if any&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-GuideSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Construct a deduction guide symbol with its ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Guide&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
GuideSymbol(link:#mrdocs-SymbolID[SymbolID] ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to construct from
|===

Compare guides by params&sol;deduced&sol;template&sol;explicit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Guide&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-GuideSymbol[GuideSymbol] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

The pattern for the deduced specialization&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Guide&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] Deduced = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Description

This is always a SpecializationType&period;

The explicit&hyphen;specifier, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Guide&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExplicitInfo[ExplicitInfo] Explicit;
----

The parameters of the deduction guide&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Guide&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Param&gt; Params;
----

Template head, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Guide&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;TemplateInfo&gt;] Template;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

A handlebars environment

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class Handlebars;
----

== Description

This class implements a handlebars template environment&period;

It is analogous to the complete state held by the handlebars&period;js module, including registered helpers and partials&period;

In the general case, handlebars&period;js provides a global `Handlebars` environment where helpers and partials are registered&colon;

[,cpp]
----
{.js}
      let template = Handlebars.compile("{{foo}}");
      let result = template({foo: "bar"});
----
but also provides a way to create a new isolated environment with its own helpers and partials&colon;

[,cpp]
----
{.js}
      let OtherHandlebars = Handlebars.create();
      let template = OtherHandlebars.compile("{{foo}}");
      let result = template({foo: "bar"});
----
In this implementation, however, there&apos;s no global environment&period; A new environment needs to be created explicitly be instantiating this class&colon;

[,cpp]
----
{.cpp}
      Handlebars env;
      dom::Object context;
      context["foo"] = "bar";
      std::string result = env.render("{{ foo }}", context);
      assert(result == "bar");
----
A handlebars template can be rendered using the context data provided as a `dom&colon;&colon;Value`, which is usually a `dom&colon;&colon;Object` at the first level when calling `render`&period;

In the most general case, the result can returned as a string or rendered directly to a buffer or stream&period; The render function provides an overload that allows the caller to provide an output stream where the template will be rendered directly without allocating a string&colon;

[,cpp]
----
{.cpp}
      Handlebars env;
      dom::Object context;
      context["foo"] = "bar";
      env.render_to(std::cout, "{{ foo }}", context);
      // prints "bar" to stdout
----
[,cpp]
----
{.cpp}
      Handlebars env;
      dom::Object context;
      context["foo"] = "bar";
      std::string result;
      env.render_to(result, "{{ foo }}", context);
      assert(result == "bar");
----
Design considerations&colon;

The following notes include some design considerations for the current implementation of this class&period; These are intended to describe the current state of the class rather than to provide the final specification of the class behavior&period;

Compiled templates&colon;

Unlike handlebars&period;js, this implementation renders the template directly to the output stream, without requiring an intermediary object to store a representation of the compiled template (`Handlebars&period;precompile`) or an intermediary callable object required to ultimately render the template (`Handlebars&period;precompile`)&period;

The rationale is that there is not much benefit in pre&hyphen;compiling templates in C&plus;&plus;, since both iterating the input string and a pre&hyphen;compiled template would have very similar costs even in optimal implementations of the compiled template&period;

The most significant benefit of pre&hyphen;compiling templates in C&plus;&plus; would be the faster identification of the ends of blocks, which would allow the engine iterate the block only once&period; For this reason, compiled templates will still be considered in a future version of this sub&hyphen;library&period;

Also note that compiled templates cannot avoid exceptions, because a compiled template can still invoke a helper that throws exceptions and evaluate dynamic expressions that cannot be identified during the first pass&period;

Incremental rendering and compilation&colon;

Although this is not supported by handlebars&period;js, it&apos;s common for C&plus;&plus; template engines to support incremental rendering, where the template is compiled or rendered in chunks as it is parsed&period; This implementation does not yet support this feature&period;

This is useful for streaming templates, where the template is rendered to a stream as it is parsed, without requiring the entire template to be parsed and compiled before rendering starts&period;

There are two types of incremental rendering and compilation supported by this implementation&colon;

* Incremental rendering of a partial template input to a stream
* Incremental rendering into an output buffer of fixed size

In each of these cases, the template is rendered in chunks until the end of the partial template is reached or the output buffer is full&period;

In a scenario with compiled templates, the complexity of incremental rendering needs to be implemented for both compilation and rendering&period;

The main difficulty to implement incremental rendering for handlebars&period;js is that helpers can be invoked from anywhere in the template, and most content is actually rendered by helpers&period; This means that helpers would need to be able to interoperate with whatever mechanism is designed to support suspension in this recursive&hyphen;coroutine&hyphen;like interface&period;

Error propagation&colon;

The main logic to render a template is implemented in the `render` function, does not throws by itself&period; How identifying the next tag in a template string, the algorithms uses a loose implementation where unclosed tags are rendered as&hyphen;is instead of throwing errors&period;

However, helpers are allowed to throw exceptions to propagate errors, so the `render` function is not `noexcept`&period;

For this reason, exceptions thrown by helpers are in fact exceptional conditions that should be handled by the caller&period; In general, exceptions can be avoided completely by not throwing exceptions from helpers&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Handlebars-Tag[`Tag`] 
| Internal representation of a parsed Handlebars tag&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Handlebars-2constructor[`Handlebars`]         [.small]#[constructor]#
| Construct a handlebars environment
| link:#mrdocs-Handlebars-registerHelper[`registerHelper`] 
| Register a helper accessible by any template in the environment&period;
| link:#mrdocs-Handlebars-registerLogger[`registerLogger`] 
| Register a logger
| link:#mrdocs-Handlebars-registerPartial[`registerPartial`] 
| Register a partial
| link:#mrdocs-Handlebars-render-0f[`render`] 
| Render a handlebars template
| link:#mrdocs-Handlebars-render_to-04[`render&lowbar;to`] 
| Render a handlebars template
| link:#mrdocs-Handlebars-try_render-02[`try&lowbar;render`] 
| Render a handlebars template
| link:#mrdocs-Handlebars-try_render_to-04[`try&lowbar;render&lowbar;to`] 
| Render a handlebars template
| link:#mrdocs-Handlebars-unregisterHelper[`unregisterHelper`] 
| Unregister a helper
| link:#mrdocs-Handlebars-unregisterPartial[`unregisterPartial`] 
| Unregister a partial
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-helpers-registerAntoraHelpers[`helpers&colon;&colon;registerAntoraHelpers`]
| Register all the Antora helpers into a Handlebars instance
| link:#mrdocs-helpers-registerBuiltinHelpers[`helpers&colon;&colon;registerBuiltinHelpers`]
| Register all the built&hyphen;in helpers into a Handlebars instance
| link:#mrdocs-helpers-registerConstructorHelpers[`helpers&colon;&colon;registerConstructorHelpers`]
| Register contructor helpers into a Handlebars instance
| link:#mrdocs-helpers-registerContainerHelpers[`helpers&colon;&colon;registerContainerHelpers`]
| Register helpers to manipulate composite data types
| link:#mrdocs-helpers-registerLogicalHelpers[`helpers&colon;&colon;registerLogicalHelpers`]
| Register logical helpers into a Handlebars instance
| link:#mrdocs-helpers-registerMathHelpers[`helpers&colon;&colon;registerMathHelpers`]
| Register math helpers into a Handlebars instance
| link:#mrdocs-helpers-registerStringHelpers[`helpers&colon;&colon;registerStringHelpers`]
| Register string helpers into a Handlebars instance
| link:#mrdocs-helpers-registerTypeHelpers[`helpers&colon;&colon;registerTypeHelpers`]
| Register type helpers into a Handlebars instance
| link:#mrdocs-js-registerHelper[`js&colon;&colon;registerHelper`]
| Register a JavaScript helper function
|===

== See Also

https&colon;&sol;&sol;handlebarsjs&period;com&sol;

Internal representation of a parsed Handlebars tag&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Tag;
----

Construct a handlebars environment

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Handlebars();
----

== Description

This constructor creates a new handlebars environment with the built&hyphen;in helpers and default logger&period;

Each environment has its own helpers and partials&period; Multiple environments are only necessary for use cases that demand distinct helpers or partials&period;

== See Also

helpers&colon;&colon;registerBuiltinHelpers

Register a helper accessible by any template in the environment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerHelper(
    std::string&lowbar;view name,
    link:#mrdocs-dom-Function[dom::Function] const& helper);
----

== Description

The helper type is a type erased function of type link:#mrdocs-dom-Function[`dom&colon;&colon;Function`], which receives the resolved template arguments as parameters as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] for each parameter&period;

The helper function also receives an object populated with variables that are accessible in the current context as its N&plus;1&hyphen;th parameter&period; This object contains information about the current context and is useful for helpers that want to change the current context or render internal blocks&period;

As all instances of link:#mrdocs-dom-Function[`dom&colon;&colon;Function`], the helper should also return a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`]&period; If the function semantics does not require a return value, the function should return a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] of type link:#mrdocs-dom-Kind[`dom&colon;&colon;Kind&colon;&colon;Undefined`]&period;

When the helper is used in an subexpression, the link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] return value is used as the intermediary result&period; When the helper is used in a block or a final expression, the link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] return value will be formatted to the output&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The name of the helper in the handlebars template
| *helper*
| The helper function
|===

== See Also

https&colon;&sol;&sol;handlebarsjs&period;com&sol;guide&sol;expressions&period;html

https&colon;&sol;&sol;handlebarsjs&period;com&sol;guide&sol;block&hyphen;helpers&period;html

https&colon;&sol;&sol;handlebarsjs&period;com&sol;guide&sol;builtin&hyphen;helpers&period;html

Register a logger

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerLogger(link:#mrdocs-dom-Function[dom::Function] fn);
----

== Description

This function registers a logger with the handlebars environment&period; A logger is a function that is called from the built&hyphen;in &quot;log&quot; helper function&period;

The logger can also be called from any helper through the `HandlebarsCallback` parameter&period;

The logger function is called with a `dom&colon;&colon;Value` indicating the current level and a `dom&colon;&colon;Array` containing values to be logged&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fn*
| The logger function
|===

Register a partial

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
registerPartial(
    std::string&lowbar;view name,
    std::string&lowbar;view text);
----

== Description

This function registers a partial with the handlebars environment&period;

A partial is a template that can be referenced from another template&period; The partial is rendered in the context of the template that references it&period;

For instance, a partial can be used to render a header or footer that is common to several pages&period; It can also be used to render a list of items that is used in several places&period;

The following example template uses the partial `item` to render a list of items&colon;

[,cpp]
----
{.handlebars}
        <ul>
        {{#each items}}
            {{> item}}
        {{/each}}
        </ul>
----
== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The name of the partial
| *text*
| The content of the partial
|===

== See Also

https&colon;&sol;&sol;handlebarsjs&period;com&sol;guide&sol;partials&period;html

Render a handlebars template

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-Handlebars-render-01[render](std::string&lowbar;view templateText) const;
----

[.small]#link:#mrdocs-Handlebars-render-01[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-Handlebars-render-07[render](
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context) const;
----

[.small]#link:#mrdocs-Handlebars-render-07[_» more&period;&period;&period;_]#

Render a handlebars template


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-Handlebars-render-0e[render](
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& options) const;
----

[.small]#link:#mrdocs-Handlebars-render-0e[_» more&period;&period;&period;_]#

== Return Value

The rendered text

== Parameters

[cols="1,4"]
|===
|Name|Description

| *templateText*
| The handlebars template text
| *context*
| The data to render
| *options*
| The options to use
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
render(std::string&lowbar;view templateText) const;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
render(
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context) const;
----

Render a handlebars template

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
render(
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& options) const;
----

== Description

This function renders the specified handlebars template and returns the result as a string&period;

The context data to render is passed as a dom&colon;&colon;Value, which is usually a dom&colon;&colon;Object at the first level&period; When the context is not an object, it is accessed from the handlebars template with the `this` keyword&period;

== Return Value

The rendered text

== Parameters

[cols="1,4"]
|===
|Name|Description

| *templateText*
| The handlebars template text
| *context*
| The data to render
| *options*
| The options to use
|===

Render a handlebars template

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-Handlebars-render_to-00[render&lowbar;to](
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText) const;
----

[.small]#link:#mrdocs-Handlebars-render_to-00[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-Handlebars-render_to-01[render&lowbar;to](
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context) const;
----

[.small]#link:#mrdocs-Handlebars-render_to-01[_» more&period;&period;&period;_]#

Render a handlebars template


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-Handlebars-render_to-02[render&lowbar;to](
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& options) const;
----

[.small]#link:#mrdocs-Handlebars-render_to-02[_» more&period;&period;&period;_]#

== Return Value

The rendered text

== Parameters

[cols="1,4"]
|===
|Name|Description

| *out*
| The output stream reference
| *templateText*
| The handlebars template text
| *context*
| The data to render
| *options*
| The options to use
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
render&lowbar;to(
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText) const;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
render&lowbar;to(
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context) const;
----

Render a handlebars template

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
render&lowbar;to(
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& options) const;
----

== Description

This function renders the specified handlebars template and writes the result to the specified output stream&period;

The output stream can be any type convertible to OutputRef, which is a reference to a stream that can be written to with the &lt;&lt; operator&period;

== Return Value

The rendered text

== Parameters

[cols="1,4"]
|===
|Name|Description

| *out*
| The output stream reference
| *templateText*
| The handlebars template text
| *context*
| The data to render
| *options*
| The options to use
|===

Render a handlebars template

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string, HandlebarsError&gt;]
link:#mrdocs-Handlebars-try_render-08[try&lowbar;render](std::string&lowbar;view templateText) const;
----

[.small]#link:#mrdocs-Handlebars-try_render-08[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string, HandlebarsError&gt;]
link:#mrdocs-Handlebars-try_render-0c[try&lowbar;render](
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context) const;
----

[.small]#link:#mrdocs-Handlebars-try_render-0c[_» more&period;&period;&period;_]#

Render a handlebars template


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string, HandlebarsError&gt;]
link:#mrdocs-Handlebars-try_render-09[try&lowbar;render](
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& options) const;
----

[.small]#link:#mrdocs-Handlebars-try_render-09[_» more&period;&period;&period;_]#

== Return Value

The rendered text

== Parameters

[cols="1,4"]
|===
|Name|Description

| *templateText*
| The handlebars template text
| *context*
| The data to render
| *options*
| The options to use
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string, HandlebarsError&gt;]
try&lowbar;render(std::string&lowbar;view templateText) const;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string, HandlebarsError&gt;]
try&lowbar;render(
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context) const;
----

Render a handlebars template

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string, HandlebarsError&gt;]
try&lowbar;render(
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& options) const;
----

== Description

This function renders the specified handlebars template and writes the result to the specified output stream&period;

The output stream can be any type convertible to OutputRef, which is a reference to a stream that can be written to with the &lt;&lt; operator&period;

== Return Value

The rendered text

== Parameters

[cols="1,4"]
|===
|Name|Description

| *templateText*
| The handlebars template text
| *context*
| The data to render
| *options*
| The options to use
|===

Render a handlebars template

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void, HandlebarsError&gt;]
link:#mrdocs-Handlebars-try_render_to-0d9[try&lowbar;render&lowbar;to](
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText) const;
----

[.small]#link:#mrdocs-Handlebars-try_render_to-0d9[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void, HandlebarsError&gt;]
link:#mrdocs-Handlebars-try_render_to-01[try&lowbar;render&lowbar;to](
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context) const;
----

[.small]#link:#mrdocs-Handlebars-try_render_to-01[_» more&period;&period;&period;_]#

Render a handlebars template


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void, HandlebarsError&gt;]
link:#mrdocs-Handlebars-try_render_to-0d3[try&lowbar;render&lowbar;to](
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& options) const;
----

[.small]#link:#mrdocs-Handlebars-try_render_to-0d3[_» more&period;&period;&period;_]#

== Return Value

The rendered text

== Parameters

[cols="1,4"]
|===
|Name|Description

| *out*
| The output stream reference
| *templateText*
| The handlebars template text
| *context*
| The data to render
| *options*
| The options to use
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void, HandlebarsError&gt;]
try&lowbar;render&lowbar;to(
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText) const;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void, HandlebarsError&gt;]
try&lowbar;render&lowbar;to(
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context) const;
----

Render a handlebars template

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void, HandlebarsError&gt;]
try&lowbar;render&lowbar;to(
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view templateText,
    link:#mrdocs-dom-Value[dom::Value] const& context,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& options) const;
----

== Description

This function renders the specified handlebars template and writes the result to the specified output stream&period;

The output stream can be any type convertible to OutputRef, which is a reference to a stream that can be written to with the &lt;&lt; operator&period;

== Return Value

The rendered text

== Parameters

[cols="1,4"]
|===
|Name|Description

| *out*
| The output stream reference
| *templateText*
| The handlebars template text
| *context*
| The data to render
| *options*
| The options to use
|===

Unregister a helper

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
unregisterHelper(std::string&lowbar;view name);
----

== Description

This function unregisters a helper with the handlebars environment&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The name of the helper
|===

Unregister a partial

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
unregisterPartial(std::string&lowbar;view name);
----

== Description

This function unregisters a partial with the handlebars environment&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The name of the partial
|===

An error thrown or returned by Handlebars

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct HandlebarsError
    : std::runtime&lowbar;error
----

== Description

An error returned or thrown by Handlebars environment when an error occurs during template rendering&period;

The error message will be the same as the error message returned by Handlebars&period;js&period;

The object will also contain the line, column and position of the error in the template&period; These can be used to by the caller to provide more detailed error messages&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `std::runtime&lowbar;error`
| One of two subclasses of exception&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-HandlebarsError-2constructor-0e[`HandlebarsError`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-HandlebarsError-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-HandlebarsError-what[`what`]  [.small]#[virtual]#
| Returns a C&hyphen;style character string describing the general cause of the current error (the same string passed to the ctor)&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-HandlebarsError-column[`column`] 
| Column of the error in the template&period;
| link:#mrdocs-HandlebarsError-line[`line`] 
| Line number in the template where the error occurred&period;
| link:#mrdocs-HandlebarsError-pos[`pos`] 
| Absolute character position of the error&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

Construct an error with a message&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-HandlebarsError-2constructor-02[HandlebarsError](std::string&lowbar;view msg);
----

[.small]#link:#mrdocs-HandlebarsError-2constructor-02[_» more&period;&period;&period;_]#

Construct an error with location information&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-HandlebarsError-2constructor-00[HandlebarsError](
    std::string&lowbar;view msg,
    std::size&lowbar;t line&lowbar;,
    std::size&lowbar;t column&lowbar;,
    std::size&lowbar;t pos&lowbar;);
----

[.small]#link:#mrdocs-HandlebarsError-2constructor-00[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *msg*
| Description of the failure&period;
| *line&lowbar;*
| Line number where it occurred&period;
| *column&lowbar;*
| Column number where it occurred&period;
| *pos&lowbar;*
| Absolute character position&period;
|===

Construct an error with a message&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
HandlebarsError(std::string&lowbar;view msg);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *msg*
| Description of the failure&period;
|===

Construct an error with location information&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
HandlebarsError(
    std::string&lowbar;view msg,
    std::size&lowbar;t line&lowbar;,
    std::size&lowbar;t column&lowbar;,
    std::size&lowbar;t pos&lowbar;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *msg*
| Description of the failure&period;
| *line&lowbar;*
| Line number where it occurred&period;
| *column&lowbar;*
| Column number where it occurred&period;
| *pos&lowbar;*
| Absolute character position&period;
|===

Assignment operators

== Synopses

Declared in `&lt;stdexcept&gt;`

Assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
runtime&lowbar;error&
link:#mrdocs-HandlebarsError-operator_assign-04[operator&equals;](runtime&lowbar;error const& value) noexcept;
----

[.small]#link:#mrdocs-HandlebarsError-operator_assign-04[_» more&period;&period;&period;_]#

Assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
runtime&lowbar;error&
link:#mrdocs-HandlebarsError-operator_assign-0d[operator&equals;](runtime&lowbar;error&& value) noexcept;
----

[.small]#link:#mrdocs-HandlebarsError-operator_assign-0d[_» more&period;&period;&period;_]#

Assignment operator

== Synopsis

Declared in `&lt;stdexcept&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
runtime&lowbar;error&
operator&equals;(runtime&lowbar;error const& value) noexcept;
----

== Return Value

One of two subclasses of exception&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to copy assign from
|===

Assignment operator

== Synopsis

Declared in `&lt;stdexcept&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
runtime&lowbar;error&
operator&equals;(runtime&lowbar;error&& value) noexcept;
----

== Return Value

One of two subclasses of exception&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to move assign from
|===

Returns a C&hyphen;style character string describing the general cause of the current error (the same string passed to the ctor)&period;

== Synopsis

Declared in `&lt;stdexcept&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
virtual
char const*
what() const noexcept;
----

Column of the error in the template&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t column = static&lowbar;cast&lt;std&colon;&colon;size&lowbar;t&gt;(&hyphen;1);
----

Line number in the template where the error occurred&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t line = static&lowbar;cast&lt;std&colon;&colon;size&lowbar;t&gt;(&hyphen;1);
----

Absolute character position of the error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t pos = static&lowbar;cast&lt;std&colon;&colon;size&lowbar;t&gt;(&hyphen;1);
----

Options for handlebars

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct HandlebarsOptions;
----

== Description

This struct is analogous to the Handlebars&period;compile options&period;

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-HandlebarsOptions-assumeObjects[`assumeObjects`] 
| Removes object existence checks when traversing paths
| link:#mrdocs-HandlebarsOptions-compat[`compat`] 
| Enable recursive field lookup
| link:#mrdocs-HandlebarsOptions-data[`data`] 
| Custom private data object
| link:#mrdocs-HandlebarsOptions-escapeFunction[`escapeFunction`] 
| Function to escape entities
| link:#mrdocs-HandlebarsOptions-explicitPartialContext[`explicitPartialContext`] 
| Disables implicit context for partials
| link:#mrdocs-HandlebarsOptions-ignoreStandalone[`ignoreStandalone`] 
| Disables standalone tag removal when set to true
| link:#mrdocs-HandlebarsOptions-noEscape[`noEscape`] 
| Escape HTML entities or entities defined by the escape function
| link:#mrdocs-HandlebarsOptions-preventIndent[`preventIndent`] 
| Disable the auto&hyphen;indent feature
| link:#mrdocs-HandlebarsOptions-strict[`strict`] 
| Templates will throw rather than ignore missing fields
| link:#mrdocs-HandlebarsOptions-trackIds[`trackIds`] 
| Enable tracking of ids
|===

== See Also

https&colon;&sol;&sol;handlebarsjs&period;com&sol;api&hyphen;reference&sol;compilation&period;html

Removes object existence checks when traversing paths

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool assumeObjects = false;
----

== Description

This is a subset of strict mode that generates optimized templates when the data inputs are known to be safe&period;

Enable recursive field lookup

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool compat = false;
----

== Description

When enabled, fields will be looked up recursively in objects and arrays&period;

This mode should be used to enable complete compatibility with Mustache templates&period;

Custom private data object

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value] data = nullptr;
----

== Description

This variable can be used to pass in an object to define custom private variables&period;

Function to escape entities

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::function&lt;void(link:#mrdocs-OutputRef[OutputRef]&, std::string&lowbar;view)&gt; escapeFunction = static&lowbar;cast&lt;void(&ast;)(OutputRef&amp;, std&colon;&colon;string&lowbar;view)&gt;(HTMLEscape);
----

== Description

It&apos;s initialized with a reference to the HTMLEscape function overload that takes an OutputRef and a string&lowbar;view&period; This function can be replaced with a custom function that escapes entities in a different way&period;

Disables implicit context for partials

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool explicitPartialContext = false;
----

== Description

When enabled, partials that are not passed a context value will execute against an empty object&period;

Disables standalone tag removal when set to true

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool ignoreStandalone = false;
----

== Description

By default, Handlebars removes whitespace around block and partial expressions&period; For instance, the partial&colon;

[,cpp]
----
{.handlebars}
        A
----
and the template&colon;

[,cpp]
----
{.handlebars}
        <div>
            {{> partial}}
        </div>
----
will render as&colon;

[,cpp]
----
{.html}
        <div>
            A</div>
----
because the whitespace up to the newline after the partial is removed&period;

A double newline is required to ensure that the whitespace is not removed&period; For instance, the template&colon;

[,cpp]
----
{.handlebars}
        <div>
            {{> partial}}

        </div>
----
will render as&colon;

[,cpp]
----
{.html}
        <div>
            A
        </div>
----
This can be disabled by setting this option to true&period;

When set, blocks and partials that are on their own line will not remove the whitespace on that line&period;

Escape HTML entities or entities defined by the escape function

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool noEscape = false;
----

Disable the auto&hyphen;indent feature

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool preventIndent = false;
----

== Description

By default, an indented partial&hyphen;call causes the output of the whole partial being indented by the same amount&period;

For instance, the partial&colon;

[,cpp]
----
{.handlebars}
        A
        B
        C
----
and the template&colon;

[,cpp]
----
{.handlebars}
        <div>
            {{> partial}}
        </div>
----
will render as&colon;

[,cpp]
----
{.html}
        <div>
            A
            B
            C
        </div>
----
because the partial is indented by the same amount as the partial call&period;

This can be disabled by setting this option to true&period; In this case, the partial above would be rendered as&colon;

[,cpp]
----
{.html}
        <div>
            A
        B
        C
        </div>





----
Templates will throw rather than ignore missing fields

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool strict = false;
----

== Description

Run in strict mode&period; In this mode, templates will throw rather than silently ignore missing fields&period;

Enable tracking of ids

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool trackIds = false;
----

== Description

When enabled, the ids of the expressions are tracked and passed to the helpers&period;

Helpers often use this information to update the context path to the current expression, which can later be used to look up the value of the expression with &quot;&period;&period;&quot; segments&period;

Represents an identifier

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;IdentifierName&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct IdentifierName final
    : link:#mrdocs-Name[Name]
----

== Description

This class is used to represent an identifier that could be in the corpus or not&period;

When the symbol is in the corpus, the `id` field will be set to the symbol ID of the symbol&period;

When the symbol is not in the corpus, the `id` field will be set to `SymbolID&colon;&colon;invalid`&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-Name[Name]`
| Represents a name for a named `Type`
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-IdentifierName-2constructor[`IdentifierName`]         [.small]#[constructor]#
| Default&hyphen;construct an identifier with kind Identifier&period;
| link:#mrdocs-Name-asName-08[`asName`] 
| `asName` overloads
| link:#mrdocs-Name-operator_eq[`operator&equals;&equals;`] 
| Equality compares all fields&period;
| link:#mrdocs-IdentifierName-operator_3way-03[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Name-Identifier[`Identifier`] 
| The unqualified name&period;
| link:#mrdocs-Name-Kind[`Kind`] 
| The kind of name this is&period;
| link:#mrdocs-Name-Prefix[`Prefix`] 
| The parent name info, if any&period;
| link:#mrdocs-Name-id[`id`] 
| The SymbolID of the named symbol, if it exists&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-0c[`toString`]
| Convert the name to a human&hyphen;readable string&period;
|===

Default&hyphen;construct an identifier with kind Identifier&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;IdentifierName&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
IdentifierName() noexcept;
----

Three&hyphen;way comparison operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

Compare identifiers by their base name state&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-IdentifierName-operator_3way-0b[operator&lt;&equals;&gt;](link:#mrdocs-IdentifierName[IdentifierName] const& other) const;
----

[.small]#link:#mrdocs-IdentifierName-operator_3way-0b[_» more&period;&period;&period;_]#

Order names by kind, identifier, id, and prefix&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-Name-operator_3way[operator&lt;&equals;&gt;](link:#mrdocs-Name[Name] const& other) const;
----

[.small]#link:#mrdocs-Name-operator_3way[_» more&period;&period;&period;_]#

Compare identifiers by their base name state&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;IdentifierName&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(link:#mrdocs-IdentifierName[IdentifierName] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

Order names by kind, identifier, id, and prefix&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-Name[Name] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

An lvalue reference type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;LValueReferenceType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct LValueReferenceType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;LValueReference&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;LValueReference&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-LValueReferenceType-isArray[`isArray`] 
| link:#mrdocs-LValueReferenceType-isAuto[`isAuto`] 
| link:#mrdocs-LValueReferenceType-isDecltype[`isDecltype`] 
| link:#mrdocs-LValueReferenceType-isFunction[`isFunction`] 
| link:#mrdocs-LValueReferenceType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-LValueReferenceType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-LValueReferenceType-isNamed[`isNamed`] 
| link:#mrdocs-LValueReferenceType-isPointer[`isPointer`] 
| link:#mrdocs-LValueReferenceType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-LValueReferenceType-PointeeType[`PointeeType`] 
| The referenced type&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-LValueReferenceType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

The referenced type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;LValueReferenceType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] PointeeType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

Source location of a symbol or entity&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Location;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Location-2constructor[`Location`]         [.small]#[constructor]#
| Construct a location with optional fields&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Location-ColumnNumber[`ColumnNumber`] 
| Column number within the line
| link:#mrdocs-Location-Documented[`Documented`] 
| Whether this location has documentation&period;
| link:#mrdocs-Location-FullPath[`FullPath`] 
| The full file path
| link:#mrdocs-Location-LineNumber[`LineNumber`] 
| Line number within the file
| link:#mrdocs-Location-ShortPath[`ShortPath`] 
| The file path relative to one of the search directories
| link:#mrdocs-Location-SourcePath[`SourcePath`] 
| The file path relative to the source&hyphen;root directory
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
| link:#mrdocs-getPrimaryLocation-0f[`getPrimaryLocation`]
| Choose the best location to display for a symbol&period;
|===

Construct a location with optional fields&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Location(
    std::string&lowbar;view const full&lowbar;path = &lcub;&rcub;,
    std::string&lowbar;view const short&lowbar;path = &lcub;&rcub;,
    std::string&lowbar;view const source&lowbar;path = &lcub;&rcub;,
    unsigned int const line = 0,
    unsigned int const col = 0,
    bool const documented = false);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *full&lowbar;path*
| Absolute path to the file on disk&period;
| *short&lowbar;path*
| Repository&hyphen; or search&hyphen;root relative path, may be empty&period;
| *source&lowbar;path*
| Path relative to the documented source root&period;
| *line*
| Line number within the file&period;
| *col*
| Column number within the line&period;
| *documented*
| Whether the location already carries user documentation&period;
|===

Column number within the line

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
unsigned int ColumnNumber = 0;
----

Whether this location has documentation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool Documented = false;
----

The full file path

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string FullPath;
----

Line number within the file

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
unsigned int LineNumber = 0;
----

The file path relative to one of the search directories

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string ShortPath;
----

The file path relative to the source&hyphen;root directory

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string SourcePath;
----

Pointer&hyphen;to&hyphen;member type (object or function)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;MemberPointerType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct MemberPointerType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;MemberPointer&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;MemberPointer&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-MemberPointerType-isArray[`isArray`] 
| link:#mrdocs-MemberPointerType-isAuto[`isAuto`] 
| link:#mrdocs-MemberPointerType-isDecltype[`isDecltype`] 
| link:#mrdocs-MemberPointerType-isFunction[`isFunction`] 
| link:#mrdocs-MemberPointerType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-MemberPointerType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-MemberPointerType-isNamed[`isNamed`] 
| link:#mrdocs-MemberPointerType-isPointer[`isPointer`] 
| link:#mrdocs-MemberPointerType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-MemberPointerType-ParentType[`ParentType`] 
| Containing class type&period;
| link:#mrdocs-MemberPointerType-PointeeType[`PointeeType`] 
| Pointee type being referenced&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-MemberPointerType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

Containing class type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;MemberPointerType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] ParentType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

Pointee type being referenced&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;MemberPointerType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] PointeeType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

Represents a name for a named `Type`

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Name;
----

== Description

When the `Type` is a named type, this class represents the name of the type&period;

It also includes the symbol ID of the named type, so that it can be referenced in the documentation&period;

This allows the `Type` to store either a `Name` or a `SpecializationName`, which contains the arguments for a template specialization without requiring the application to extract an unnecessary symbol&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Name-2destructor[`&#126;Name`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for polymorphic cleanup&period;
| link:#mrdocs-Name-asName-08[`asName`] 
| `asName` overloads
| link:#mrdocs-Name-operator_eq[`operator&equals;&equals;`] 
| Equality compares all fields&period;
| link:#mrdocs-Name-operator_3way[`operator&lt;&equals;&gt;`] 
| Order names by kind, identifier, id, and prefix&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Name-Identifier[`Identifier`] 
| The unqualified name&period;
| link:#mrdocs-Name-Kind[`Kind`] 
| The kind of name this is&period;
| link:#mrdocs-Name-Prefix[`Prefix`] 
| The parent name info, if any&period;
| link:#mrdocs-Name-id[`id`] 
| The SymbolID of the named symbol, if it exists&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Name-2constructor-0b[`Name`]         [.small]#[constructor]#
| Constructors
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-0c[`toString`]
| Convert the name to a human&hyphen;readable string&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-IdentifierName[`IdentifierName`]
| Represents an identifier
| link:#mrdocs-SpecializationName[`SpecializationName`]
| Represents a (possibly qualified) symbol name with template arguments&period;
|===

Virtual destructor for polymorphic cleanup&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;Name() = default;
----

`asName` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

View as a const Name reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Name[Name] const&
link:#mrdocs-Name-asName-05[asName]() const noexcept;
----

[.small]#link:#mrdocs-Name-asName-05[_» more&period;&period;&period;_]#

View as a mutable Name reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Name[Name]&
link:#mrdocs-Name-asName-09[asName]() noexcept;
----

[.small]#link:#mrdocs-Name-asName-09[_» more&period;&period;&period;_]#

View as a const Name reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Name[Name] const&
asName() const noexcept;
----

== Return Value

Represents a name for a named `Type`

View as a mutable Name reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Name[Name]&
asName() noexcept;
----

== Return Value

Represents a name for a named `Type`

Equality compares all fields&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(link:#mrdocs-Name[Name] const& other) const;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

Order names by kind, identifier, id, and prefix&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-Name[Name] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

The unqualified name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string Identifier;
----

The kind of name this is&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-NameKind[NameKind] Kind;
----

The parent name info, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Name&gt;&gt;] Prefix = std&colon;&colon;nullopt;
----

== Description

This recursively includes information about the parent, such as the symbol ID and potentially template arguments, when the parent is a SpecializationName&period;

This is particularly useful because the parent of `id` could be a primary template&period; In this case, the Prefix will contain this primary template information and the template arguments&period;

The SymbolID of the named symbol, if it exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] id = &equals; SymbolID&colon;&colon;invalid;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

Construct an identifier name&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Name-2constructor-06[Name]() noexcept;
----

[.small]#link:#mrdocs-Name-2constructor-06[_» more&period;&period;&period;_]#

Construct with an explicit name kind&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
link:#mrdocs-Name-2constructor-0c[Name](link:#mrdocs-NameKind[NameKind] const kind) noexcept;
----

[.small]#link:#mrdocs-Name-2constructor-0c[_» more&period;&period;&period;_]#

Construct an identifier name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Name() noexcept;
----

Construct with an explicit name kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
Name(link:#mrdocs-NameKind[NameKind] const kind) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The object to construct from
|===

A type identified by name (possibly fundamental)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;NamedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct NamedType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Named&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Named&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-NamedType-isArray[`isArray`] 
| link:#mrdocs-NamedType-isAuto[`isAuto`] 
| link:#mrdocs-NamedType-isDecltype[`isDecltype`] 
| link:#mrdocs-NamedType-isFunction[`isFunction`] 
| link:#mrdocs-NamedType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-NamedType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-NamedType-isNamed[`isNamed`] 
| link:#mrdocs-NamedType-isPointer[`isPointer`] 
| link:#mrdocs-NamedType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-NamedType-FundamentalType[`FundamentalType`] 
| Fundamental kind if this named type is a built&hyphen;in&period;
| link:#mrdocs-NamedType-Name[`Name`] 
| The name of the type (identifier or specialization)&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-NamedType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

Fundamental kind if this named type is a built&hyphen;in&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;NamedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;FundamentalTypeKind&gt;] FundamentalType;
----

The name of the type (identifier or specialization)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;NamedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] Name = Polymorphic&lt;struct Name&gt;(std&colon;&colon;in&lowbar;place&lowbar;type&lt;IdentifierName&gt;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

Info for namespace aliases&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;NamespaceAlias&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct NamespaceAliasSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;NamespaceAlias&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;NamespaceAlias&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-NamespaceAliasSymbol-2constructor[`NamespaceAliasSymbol`]         [.small]#[constructor]#
| Create an alias symbol bound to an ID&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-NamespaceAliasSymbol-isConcept[`isConcept`] 
| link:#mrdocs-NamespaceAliasSymbol-isEnum[`isEnum`] 
| link:#mrdocs-NamespaceAliasSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-NamespaceAliasSymbol-isFunction[`isFunction`] 
| link:#mrdocs-NamespaceAliasSymbol-isGuide[`isGuide`] 
| link:#mrdocs-NamespaceAliasSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-NamespaceAliasSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-NamespaceAliasSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-NamespaceAliasSymbol-isRecord[`isRecord`] 
| link:#mrdocs-NamespaceAliasSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-NamespaceAliasSymbol-isUsing[`isUsing`] 
| link:#mrdocs-NamespaceAliasSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-NamespaceAliasSymbol-AliasedSymbol[`AliasedSymbol`] 
| The aliased symbol&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-NamespaceAliasSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Create an alias symbol bound to an ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;NamespaceAlias&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
NamespaceAliasSymbol(link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to copy construct from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

The aliased symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;NamespaceAlias&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-IdentifierName[IdentifierName] AliasedSymbol;
----

== Description

This is another namespace that might or might not be in the same project&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

Describes a namespace and its members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct NamespaceSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Namespace&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Namespace&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-NamespaceSymbol-2constructor[`NamespaceSymbol`]         [.small]#[constructor]#
| Create a namespace symbol bound to an ID&period;
| link:#mrdocs-NamespaceSymbol-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare namespaces by attributes and member lists&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-NamespaceSymbol-isConcept[`isConcept`] 
| link:#mrdocs-NamespaceSymbol-isEnum[`isEnum`] 
| link:#mrdocs-NamespaceSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-NamespaceSymbol-isFunction[`isFunction`] 
| link:#mrdocs-NamespaceSymbol-isGuide[`isGuide`] 
| link:#mrdocs-NamespaceSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-NamespaceSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-NamespaceSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-NamespaceSymbol-isRecord[`isRecord`] 
| link:#mrdocs-NamespaceSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-NamespaceSymbol-isUsing[`isUsing`] 
| link:#mrdocs-NamespaceSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-NamespaceSymbol-IsAnonymous[`IsAnonymous`] 
| Whether this represents an unnamed namespace&period;
| link:#mrdocs-NamespaceSymbol-IsInline[`IsInline`] 
| Whether this declaration is inline&period;
| link:#mrdocs-NamespaceSymbol-Members[`Members`] 
| The members of this namespace&period;
| link:#mrdocs-NamespaceSymbol-UsingDirectives[`UsingDirectives`] 
| Namespaces nominated by using&hyphen;directives&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-NamespaceSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-allMembers-0c[`allMembers`]
| View all members of the namespace across tranches&period;
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Create a namespace symbol bound to an ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
NamespaceSymbol(link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to copy construct from
|===

Compare namespaces by attributes and member lists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-NamespaceSymbol[NamespaceSymbol] const& rhs) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

Whether this represents an unnamed namespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsAnonymous = false;
----

Whether this declaration is inline&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsInline = false;
----

The members of this namespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-NamespaceTranche[NamespaceTranche] Members;
----

Namespaces nominated by using&hyphen;directives&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Name&gt; UsingDirectives;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

Buckets the members that appear inside a namespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct NamespaceTranche;
----

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-NamespaceTranche-Concepts[`Concepts`] 
| Concepts&period;
| link:#mrdocs-NamespaceTranche-Enums[`Enums`] 
| Enumerations&period;
| link:#mrdocs-NamespaceTranche-Functions[`Functions`] 
| Functions and overload sets&period;
| link:#mrdocs-NamespaceTranche-Guides[`Guides`] 
| Deduction guides&period;
| link:#mrdocs-NamespaceTranche-NamespaceAliases[`NamespaceAliases`] 
| Namespace aliases declared here&period;
| link:#mrdocs-NamespaceTranche-Namespaces[`Namespaces`] 
| Nested namespaces&period;
| link:#mrdocs-NamespaceTranche-Records[`Records`] 
| Record types (classes&sol;structs)&period;
| link:#mrdocs-NamespaceTranche-Typedefs[`Typedefs`] 
| Typedef or using declarations&period;
| link:#mrdocs-NamespaceTranche-Usings[`Usings`] 
| Using&hyphen;declarations that introduce members&period;
| link:#mrdocs-NamespaceTranche-Variables[`Variables`] 
| Variables&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-allMembers-00[`allMembers`]
| Join all tranche member lists into a single view&period;
|===

Concepts&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Concepts;
----

Enumerations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Enums;
----

Functions and overload sets&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Functions;
----

Deduction guides&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Guides;
----

Namespace aliases declared here&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; NamespaceAliases;
----

Nested namespaces&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Namespaces;
----

Record types (classes&sol;structs)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Records;
----

Typedef or using declarations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Typedefs;
----

Using&hyphen;declarations that introduce members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Usings;
----

Variables&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Variables;
----

Captures a `noexcept` specification and its evaluated form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct NoexceptInfo;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-NoexceptInfo-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare noexcept&hyphen;specifier info&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-NoexceptInfo-Implicit[`Implicit`] 
| Whether a noexcept&hyphen;specifier was user&hyphen;written&period;
| link:#mrdocs-NoexceptInfo-Kind[`Kind`] 
| The evaluated exception specification&period;
| link:#mrdocs-NoexceptInfo-Operand[`Operand`] 
| The operand of the noexcept&hyphen;specifier, if any&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-0dc[`toString`]
| Convert NoexceptInfo to a string&period;
|===

Compare noexcept&hyphen;specifier info&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
operator&lt;&equals;&gt;(link:#mrdocs-NoexceptInfo[NoexceptInfo] const& rhs) const = default;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| The right operand
|===

Whether a noexcept&hyphen;specifier was user&hyphen;written&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool Implicit = true;
----

The evaluated exception specification&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-NoexceptKind[NoexceptKind] Kind = NoexceptKind&colon;&colon;False;
----

The operand of the noexcept&hyphen;specifier, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string Operand;
----

A compact optional that automatically uses nullable&lowbar;traits&lt;T&gt; when available&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
class Optional;
----

== Description

Design

* If nullable&lowbar;traits&lt;T&gt; exists, the null state is encoded inside T (via sentinel or clearable&hyphen;empty semantics)&period; Storage is exactly one T&period;
* Otherwise, this falls back to std&colon;&colon;optional&lt;T&gt; and uses its discriminator&period;

This single implementation uses a conditional storage type plus if constexpr on has&lowbar;nullable&lowbar;traits&lowbar;v&lt;T&gt; to select the appropriate behavior at compile time&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Optional-03-value_type[`value&lowbar;type`] 
| Value type stored by this Optional&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Optional-03-2constructor-02[`Optional`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-Optional-03-operator_assign-026[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-Optional-03-emplace[`emplace`] 
| In&hyphen;place construct a new value, replacing any existing one&period;
| link:#mrdocs-Optional-03-has_value[`has&lowbar;value`] 
| True if engaged (contains a value)&period;
| link:#mrdocs-Optional-03-operator_star-0e[`operator&ast;`] 
| Dereference&hyphen;like access&period;
| link:#mrdocs-Optional-03-operator_ptr-08[`operator&hyphen;&gt;`] 
| Pointer&hyphen;like access&period;
| link:#mrdocs-Optional-03-reset[`reset`] 
| Reset to the null state&period; &ast;
| link:#mrdocs-Optional-03-value-0b[`value`] 
| Value access&period; Preconditions&colon; has&lowbar;value() is true&period;
| link:#mrdocs-Optional-03-2conversion[`operator bool`] 
| Contextual bool&period;
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Optional-03-is_inlined[`is&lowbar;inlined`] 
| Determine if the value is inlined via nullable traits&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-getOperatorReadableName[`getOperatorReadableName`]
| Return the human&hyphen;readable name of the operator
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
| link:#mrdocs-getPrimaryLocation-0f[`getPrimaryLocation`]
| Choose the best location to display for a symbol&period;
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-operator_not_eq-04[`operator!&equals;`]
| Compares an Optional to a value for inequality&period; Returns true if the Optional is disengaged or its value does not equal rhs&period;
| link:#mrdocs-operator_not_eq-06[`operator!&equals;`]
| Compares two Optional values for inequality&period; Returns true if their engagement states differ or their contained values are not equal&period;
| link:#mrdocs-operator_lt-09[`operator&lt;`]
| Checks if the left Optional is less than the right Optional&period; Returns true if the right is engaged and either the left is disengaged or its value is less&period;
| link:#mrdocs-operator_lt-0c[`operator&lt;`]
| Checks if the Optional is less than a value&period; Returns true if the Optional is disengaged or its value is less than rhs&period;
| link:#mrdocs-operator_le-08[`operator&lt;&equals;`]
| Checks if the left Optional is less than or equal to the right Optional&period; Returns true if the left is disengaged or the right is engaged and the left&apos;s value is less or equal&period;
| link:#mrdocs-operator_le-0e[`operator&lt;&equals;`]
| Checks if the Optional is less than or equal to a value&period; Returns true if the Optional is disengaged or its value is less than or equal to rhs&period;
| link:#mrdocs-operator_3way-041[`operator&lt;&equals;&gt;`]
| Performs a three&hyphen;way comparison between an Optional and a value&period; If the Optional is engaged, compares its value to v&semi; otherwise, returns less&period;
| link:#mrdocs-operator_3way-081[`operator&lt;&equals;&gt;`]
| Performs a three&hyphen;way comparison between two Optional values&period; If both are engaged, compares their contained values&semi; otherwise, compares engagement state&period;
| link:#mrdocs-operator_3way-089[`operator&lt;&equals;&gt;`]
| Performs a three&hyphen;way comparison between an Optional and std&colon;&colon;nullopt&period; Returns std&colon;&colon;strong&lowbar;ordering&colon;&colon;greater if engaged, std&colon;&colon;strong&lowbar;ordering&colon;&colon;equal if disengaged&period;
| link:#mrdocs-operator_eq-00b[`operator&equals;&equals;`]
| Compares two Optional values for equality&period; Returns true if both are engaged and their contained values are equal, or both are disengaged&period;
| link:#mrdocs-operator_eq-08f[`operator&equals;&equals;`]
| Checks if the Optional is disengaged (equal to std&colon;&colon;nullopt)&period; Returns true if the Optional does not contain a value&period;
| link:#mrdocs-operator_eq-0c9[`operator&equals;&equals;`]
| Compares an engaged Optional to a value for equality&period; Returns true if the Optional is engaged and its value equals rhs&period;
| link:#mrdocs-operator_gt-0a0[`operator&gt;`]
| Checks if the left Optional is greater than the right Optional&period; Returns true if the left is engaged and either the right is disengaged or its value is greater&period;
| link:#mrdocs-operator_gt-0ab[`operator&gt;`]
| Checks if the Optional is greater than a value&period; Returns true if the Optional is engaged and its value is greater than rhs&period;
| link:#mrdocs-operator_ge-04[`operator&gt;&equals;`]
| Checks if the left Optional is greater than or equal to the right Optional&period; Returns true if the right is disengaged or the left is engaged and its value is greater or equal&period;
| link:#mrdocs-operator_ge-07[`operator&gt;&equals;`]
| Checks if the Optional is greater than or equal to a value&period; Returns true if the Optional is engaged and its value is greater than or equal to rhs&period;
| link:#mrdocs-swap-0b[`swap`]
| Swap two Optional references&period;
| link:#mrdocs-dom-stringOrNull-01[`dom&colon;&colon;stringOrNull`]
| Return a non&hyphen;empty string, or a null&period;
|===

Value type stored by this Optional&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = T;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Default&hyphen;constructs to the “null” state&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-2constructor-0f[Optional]() noexcept(default&lowbar;ctor&lowbar;noex&lowbar;());
----

[.small]#link:#mrdocs-Optional-03-2constructor-0f[_» more&period;&period;&period;_]#

Copy constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-2constructor-0eb[Optional](link:#mrdocs-Optional-03[Optional] const& other) = default;
----

[.small]#link:#mrdocs-Optional-03-2constructor-0eb[_» more&period;&period;&period;_]#

Construct from another Optional with a convertible contained value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;) &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U const&amp;&gt;
            &amp;&amp; ConstructFromContainedValue&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const U &amp;, T&gt;)
link:#mrdocs-Optional-03-2constructor-06[Optional](link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& t) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-03-2constructor-06[_» more&period;&period;&period;_]#

Move constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-2constructor-0e4[Optional](link:#mrdocs-Optional-03[Optional]&& other) = default;
----

[.small]#link:#mrdocs-Optional-03-2constructor-0e4[_» more&period;&period;&period;_]#

Construct from another Optional rvalue with a convertible value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; ConstructFromContainedValue&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T&gt;)
link:#mrdocs-Optional-03-2constructor-0b[Optional](link:#mrdocs-Optional-03[Optional&lt;U&gt;]&& t) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt;);
----

[.small]#link:#mrdocs-Optional-03-2constructor-0b[_» more&period;&period;&period;_]#

Construct from std&colon;&colon;nullopt


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-2constructor-074[Optional](std::nullopt&lowbar;t value) noexcept(default&lowbar;ctor&lowbar;noex&lowbar;());
----

[.small]#link:#mrdocs-Optional-03-2constructor-074[_» more&period;&period;&period;_]#

Construct from std&colon;&colon;optional lvalue with convertible value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U const&amp;&gt; &amp;&amp;
        ConstructFromContainedValue&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const U &amp;, T&gt;)
link:#mrdocs-Optional-03-2constructor-088[Optional](std::optional&lt;U&gt; const& t) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-03-2constructor-088[_» more&period;&period;&period;_]#

Construct from a value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U = std::remove&lowbar;cv&lowbar;t&lt;T&gt;&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;Optional, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;)
            &amp;&amp; (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;in&lowbar;place&lowbar;t, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt;
            &amp;&amp; NotConstructingBoolFromOptional&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T&gt;)
link:#mrdocs-Optional-03-2constructor-01[Optional](U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt;);
----

[.small]#link:#mrdocs-Optional-03-2constructor-01[_» more&period;&period;&period;_]#

Construct from std&colon;&colon;optional rvalue with convertible value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp;
        ConstructFromContainedValue&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T&gt;)
link:#mrdocs-Optional-03-2constructor-076[Optional](std::optional&lt;U&gt;&& t) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt;);
----

[.small]#link:#mrdocs-Optional-03-2constructor-076[_» more&period;&period;&period;_]#

In&hyphen;place construct the contained value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Optional-03-2constructor-084[Optional](
    std::in&lowbar;place&lowbar;t,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Optional-03-2constructor-084[_» more&period;&period;&period;_]#

In&hyphen;place construct the contained value from an initializer list&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename U,
    typename&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Optional-03-2constructor-0e0[Optional](
    std::in&lowbar;place&lowbar;t,
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Optional-03-2constructor-0e0[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| Source optional&period;
| *u*
| The value to store&period; It must be convertible to T&period;
| *args*
| Arguments forwarded to T&apos;s constructor&period;
| *il*
| Initializer list forwarded to T&apos;s constructor&period;
|===

Default&hyphen;constructs to the “null” state&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Optional() noexcept(default&lowbar;ctor&lowbar;noex&lowbar;());
----

Copy constructor

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Optional(link:#mrdocs-Optional-03[Optional] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Construct from another Optional with a convertible contained value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;) &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U const&amp;&gt;
            &amp;&amp; ConstructFromContainedValue&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const U &amp;, T&gt;)
Optional(link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& t) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| Source optional&period;
|===

Move constructor

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Optional(link:#mrdocs-Optional-03[Optional]&& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Construct from another Optional rvalue with a convertible value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; ConstructFromContainedValue&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T&gt;)
Optional(link:#mrdocs-Optional-03[Optional&lt;U&gt;]&& t) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| Source optional&period;
|===

Construct from std&colon;&colon;nullopt

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Optional(std::nullopt&lowbar;t value) noexcept(default&lowbar;ctor&lowbar;noex&lowbar;());
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to construct from
|===

Construct from std&colon;&colon;optional lvalue with convertible value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U const&amp;&gt; &amp;&amp;
        ConstructFromContainedValue&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const U &amp;, T&gt;)
Optional(std::optional&lt;U&gt; const& t) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| Source optional&period;
|===

Construct from a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U = std::remove&lowbar;cv&lowbar;t&lt;T&gt;&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;Optional, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;)
            &amp;&amp; (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;in&lowbar;place&lowbar;t, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt;
            &amp;&amp; NotConstructingBoolFromOptional&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T&gt;)
Optional(U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The value to store&period; It must be convertible to T&period;
|===

Construct from std&colon;&colon;optional rvalue with convertible value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp;
        ConstructFromContainedValue&lt;U&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T&gt;)
Optional(std::optional&lt;U&gt;&& t) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *t*
| Source optional&period;
|===

In&hyphen;place construct the contained value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;
constexpr
explicit
Optional(
    std::in&lowbar;place&lowbar;t,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to T&apos;s constructor&period;
|===

In&hyphen;place construct the contained value from an initializer list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename U,
    typename&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
Optional(
    std::in&lowbar;place&lowbar;t,
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *il*
| Initializer list forwarded to T&apos;s constructor&period;
| *args*
| Additional arguments forwarded to T&apos;s constructor&period;
|===

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Copy assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03[Optional]&
link:#mrdocs-Optional-03-operator_assign-01e[operator&equals;](link:#mrdocs-Optional-03[Optional] const& other) = default;
----

[.small]#link:#mrdocs-Optional-03-operator_assign-01e[_» more&period;&period;&period;_]#

Assign from another Optional with convertible contained value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, const U&amp;&gt;
            &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, const U&amp;&gt;
            &amp;&amp; (!detail&colon;&colon;ConvertsFromOptional&lt;T, U&gt;&colon;&colon;value)
            &amp;&amp; (!detail&colon;&colon;AssignsFromOptional&lt;T, U&gt;&colon;&colon;value)
constexpr
link:#mrdocs-Optional-03[Optional]&
link:#mrdocs-Optional-03-operator_assign-0a[operator&equals;](link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-03-operator_assign-0a[_» more&period;&period;&period;_]#

Move assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03[Optional]&
link:#mrdocs-Optional-03-operator_assign-028[operator&equals;](link:#mrdocs-Optional-03[Optional]&& other) = default;
----

[.small]#link:#mrdocs-Optional-03-operator_assign-028[_» more&period;&period;&period;_]#

Assign from another Optional rvalue with convertible contained value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt;
            &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, U&gt;
            &amp;&amp; (!detail&colon;&colon;ConvertsFromOptional&lt;T, U&gt;&colon;&colon;value)
            &amp;&amp; (!detail&colon;&colon;AssignsFromOptional&lt;T, U&gt;&colon;&colon;value)
constexpr
link:#mrdocs-Optional-03[Optional]&
link:#mrdocs-Optional-03-operator_assign-041[operator&equals;](link:#mrdocs-Optional-03[Optional&lt;U&gt;]&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, U&gt;);
----

[.small]#link:#mrdocs-Optional-03-operator_assign-041[_» more&period;&period;&period;_]#

Reset to disengaged state from nullptr tag&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03[Optional]&
link:#mrdocs-Optional-03-operator_assign-06[operator&equals;](std::nullptr&lowbar;t value) noexcept(reset&lowbar;noex&lowbar;());
----

[.small]#link:#mrdocs-Optional-03-operator_assign-06[_» more&period;&period;&period;_]#

Assign from std&colon;&colon;optional lvalue with convertible value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, const U&amp;&gt;
            &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, const U&amp;&gt;
            &amp;&amp; (!detail&colon;&colon;ConvertsFromOptional&lt;T, U&gt;&colon;&colon;value)
            &amp;&amp; (!detail&colon;&colon;AssignsFromOptional&lt;T, U&gt;&colon;&colon;value)
constexpr
link:#mrdocs-Optional-03[Optional]&
link:#mrdocs-Optional-03-operator_assign-018[operator&equals;](std::optional&lt;U&gt; const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-03-operator_assign-018[_» more&period;&period;&period;_]#

Assign from a value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U = std::remove&lowbar;cv&lowbar;t&lt;T&gt;&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;Optional, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, U&gt;
constexpr
link:#mrdocs-Optional-03[Optional]&
link:#mrdocs-Optional-03-operator_assign-042[operator&equals;](U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, U&gt;);
----

[.small]#link:#mrdocs-Optional-03-operator_assign-042[_» more&period;&period;&period;_]#

Assign from std&colon;&colon;optional rvalue with convertible value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt;
            &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, U&gt;
            &amp;&amp; (!detail&colon;&colon;ConvertsFromOptional&lt;T, U&gt;&colon;&colon;value)
            &amp;&amp; (!detail&colon;&colon;AssignsFromOptional&lt;T, U&gt;&colon;&colon;value)
constexpr
link:#mrdocs-Optional-03[Optional]&
link:#mrdocs-Optional-03-operator_assign-0e[operator&equals;](std::optional&lt;U&gt;&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, U&gt;);
----

[.small]#link:#mrdocs-Optional-03-operator_assign-0e[_» more&period;&period;&period;_]#

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Source optional&period;
|===

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03[Optional]&
operator&equals;(link:#mrdocs-Optional-03[Optional] const& other) = default;
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Assign from another Optional with convertible contained value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, const U&amp;&gt;
            &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, const U&amp;&gt;
            &amp;&amp; (!detail&colon;&colon;ConvertsFromOptional&lt;T, U&gt;&colon;&colon;value)
            &amp;&amp; (!detail&colon;&colon;AssignsFromOptional&lt;T, U&gt;&colon;&colon;value)
constexpr
link:#mrdocs-Optional-03[Optional]&
operator&equals;(link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Source optional&period;
|===

Move assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03[Optional]&
operator&equals;(link:#mrdocs-Optional-03[Optional]&& other) = default;
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Assign from another Optional rvalue with convertible contained value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt;
            &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, U&gt;
            &amp;&amp; (!detail&colon;&colon;ConvertsFromOptional&lt;T, U&gt;&colon;&colon;value)
            &amp;&amp; (!detail&colon;&colon;AssignsFromOptional&lt;T, U&gt;&colon;&colon;value)
constexpr
link:#mrdocs-Optional-03[Optional]&
operator&equals;(link:#mrdocs-Optional-03[Optional&lt;U&gt;]&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, U&gt;);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Source optional&period;
|===

Reset to disengaged state from nullptr tag&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03[Optional]&
operator&equals;(std::nullptr&lowbar;t value) noexcept(reset&lowbar;noex&lowbar;());
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to assign from
|===

Assign from std&colon;&colon;optional lvalue with convertible value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, const U&amp;&gt;
            &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, const U&amp;&gt;
            &amp;&amp; (!detail&colon;&colon;ConvertsFromOptional&lt;T, U&gt;&colon;&colon;value)
            &amp;&amp; (!detail&colon;&colon;AssignsFromOptional&lt;T, U&gt;&colon;&colon;value)
constexpr
link:#mrdocs-Optional-03[Optional]&
operator&equals;(std::optional&lt;U&gt; const& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, const U &amp;&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Source optional&period;
|===

Assign from a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U = std::remove&lowbar;cv&lowbar;t&lt;T&gt;&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;Optional, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, U&gt;
constexpr
link:#mrdocs-Optional-03[Optional]&
operator&equals;(U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, U&gt;);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The value to store&period; It must be convertible to T&period;
|===

Assign from std&colon;&colon;optional rvalue with convertible value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;T, U&gt;)
            &amp;&amp; std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, U&gt;
            &amp;&amp; std&colon;&colon;is&lowbar;assignable&lowbar;v&lt;T&amp;, U&gt;
            &amp;&amp; (!detail&colon;&colon;ConvertsFromOptional&lt;T, U&gt;&colon;&colon;value)
            &amp;&amp; (!detail&colon;&colon;AssignsFromOptional&lt;T, U&gt;&colon;&colon;value)
constexpr
link:#mrdocs-Optional-03[Optional]&
operator&equals;(std::optional&lt;U&gt;&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, U&gt; &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;assignable&lowbar;v&lt;T &amp;, U&gt;);
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Source optional&period;
|===

In&hyphen;place construct a new value, replacing any existing one&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]&
emplace(Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T, Args&period;&period;&period;&gt;);
----

== Return Value

A reference to the newly constructed value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to forward to T&apos;s constructor&period;
|===

True if engaged (contains a value)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
has&lowbar;value() const noexcept(has&lowbar;value&lowbar;noex&lowbar;());
----

== Return Value

`true` if the optional contains a value&period;

Dereference&hyphen;like access&period;

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Dereference&hyphen;like access&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]&
link:#mrdocs-Optional-03-operator_star-0f[operator&ast;]() noexcept;
----

[.small]#link:#mrdocs-Optional-03-operator_star-0f[_» more&period;&period;&period;_]#

Dereference&hyphen;like access&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type] const&
link:#mrdocs-Optional-03-operator_star-06[operator&ast;]() const noexcept;
----

[.small]#link:#mrdocs-Optional-03-operator_star-06[_» more&period;&period;&period;_]#

== Return Value

A reference to the contained value&period;

Dereference&hyphen;like access&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]&
operator&ast;() noexcept;
----

== Return Value

A reference to the contained value&period;

Dereference&hyphen;like access&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type] const&
operator&ast;() const noexcept;
----

== Return Value

A reference to the contained value&period;

Pointer&hyphen;like access&period;

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Pointer&hyphen;like access&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]*
link:#mrdocs-Optional-03-operator_ptr-0fb[operator&hyphen;&gt;]() noexcept;
----

[.small]#link:#mrdocs-Optional-03-operator_ptr-0fb[_» more&period;&period;&period;_]#

Pointer&hyphen;like access&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type] const*
link:#mrdocs-Optional-03-operator_ptr-0fe[operator&hyphen;&gt;]() const noexcept;
----

[.small]#link:#mrdocs-Optional-03-operator_ptr-0fe[_» more&period;&period;&period;_]#

== Return Value

A pointer to the contained value&period;

Pointer&hyphen;like access&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]*
operator&hyphen;&gt;() noexcept;
----

== Return Value

A pointer to the contained value&period;

Pointer&hyphen;like access&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type] const*
operator&hyphen;&gt;() const noexcept;
----

== Return Value

A pointer to the contained value&period;

Reset to the null state&period; &ast;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
reset() noexcept(reset&lowbar;noex&lowbar;());
----

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]&
link:#mrdocs-Optional-03-value-08[value]() &amp; noexcept;
----

[.small]#link:#mrdocs-Optional-03-value-08[_» more&period;&period;&period;_]#

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type] const&
link:#mrdocs-Optional-03-value-07[value]() const &amp; noexcept;
----

[.small]#link:#mrdocs-Optional-03-value-07[_» more&period;&period;&period;_]#

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]&&
link:#mrdocs-Optional-03-value-0e[value]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Optional-03-value-0e[_» more&period;&period;&period;_]#

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type] const&&
link:#mrdocs-Optional-03-value-0f[value]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Optional-03-value-0f[_» more&period;&period;&period;_]#

== Return Value

A reference to the contained value&period;

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]&
value() &amp; noexcept;
----

== Return Value

A reference to the contained value&period;

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type] const&
value() const &amp; noexcept;
----

== Return Value

A reference to the contained value&period;

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type]&&
value() &amp;&amp; noexcept;
----

== Return Value

A reference to the contained value&period;

Value access&period; Preconditions&colon; has&lowbar;value() is true&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-03-value_type[value&lowbar;type] const&&
value() const &amp;&amp; noexcept;
----

== Return Value

A reference to the contained value&period;

Contextual bool&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
operator bool() const noexcept(noexcept(this&hyphen;&gt;has&lowbar;value()));
----

== Return Value

The object converted to `bool`

Determine if the value is inlined via nullable traits&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
is&lowbar;inlined() noexcept;
----

== Description

This is a compile&hyphen;time property of T&period; If nullable&lowbar;traits&lt;T&gt; is not specialized, this function returns false to indicate that the optional uses std&colon;&colon;optional&lt;T&gt; as storage with an extra discriminator&period; If nullable&lowbar;traits&lt;T&gt; is specialized, this function returns true to suggest that the null state is encoded inside T and no extra storage is used&period;

== Return Value

`true` if the optional uses nullable&lowbar;traits&lt;T&gt; for storage&period;

Optional reference wrapper that never owns storage&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
class link:#mrdocs-Optional-03[Optional]&lt;T&&gt;;
----

== Description

Stores a pointer to an externally owned object&semi; the disengaged state is nullptr&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Optional-02-value_type[`value&lowbar;type`] 
| Referenced value type&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Optional-02-2constructor-0b6[`Optional`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-Optional-02-operator_assign-0a[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-Optional-02-emplace[`emplace`] 
| Bind to a new referenced value&period;
| link:#mrdocs-Optional-02-has_value[`has&lowbar;value`] 
| Check whether the optional holds a reference&period;
| link:#mrdocs-Optional-02-operator_star-093[`operator&ast;`] 
| Dereference the referenced object&period;
| link:#mrdocs-Optional-02-operator_ptr-00[`operator&hyphen;&gt;`] 
| Return pointer to the referenced object&period;
| link:#mrdocs-Optional-02-reset[`reset`] 
| Disengage the optional&period;
| link:#mrdocs-Optional-02-swap[`swap`] 
| Exchange the contained value with another Optional&period;
| link:#mrdocs-Optional-02-value-04[`value`] 
| `value` overloads
| link:#mrdocs-Optional-02-2conversion[`operator bool`] 
| Return true when the optional holds a reference&period;
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Optional-02-is_inlined[`is&lowbar;inlined`] 
| Return true because Optional&lt;T&amp;&gt; never allocates storage&period;
|===

Referenced value type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = T;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Construct an empty optional reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-2constructor-023[Optional]() noexcept = default;
----

[.small]#link:#mrdocs-Optional-02-2constructor-023[_» more&period;&period;&period;_]#

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-2constructor-027[Optional](link:#mrdocs-Optional-02[Optional] const& other) noexcept = default;
----

[.small]#link:#mrdocs-Optional-02-2constructor-027[_» more&period;&period;&period;_]#

Move constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-2constructor-01[Optional](link:#mrdocs-Optional-02[Optional]&& other) noexcept = default;
----

[.small]#link:#mrdocs-Optional-02-2constructor-01[_» more&period;&period;&period;_]#

Construct disengaged from std&colon;&colon;nullopt&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-2constructor-0f[Optional](std::nullopt&lowbar;t value) noexcept;
----

[.small]#link:#mrdocs-Optional-02-2constructor-0f[_» more&period;&period;&period;_]#

Construct from another Optional holding a related reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, T &amp;&gt;)
link:#mrdocs-Optional-02-2constructor-06d[Optional](link:#mrdocs-Optional-03[Optional&lt;U&gt;]& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-02-2constructor-06d[_» more&period;&period;&period;_]#

Construct from std&colon;&colon;optional lvalue&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
link:#mrdocs-Optional-02-2constructor-09[Optional](std::optional&lt;U&gt;& o) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-02-2constructor-09[_» more&period;&period;&period;_]#

Construct from a const Optional holding a related reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U const&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const U &amp;, T &amp;&gt;)
link:#mrdocs-Optional-02-2constructor-03[Optional](link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-02-2constructor-03[_» more&period;&period;&period;_]#

Construct from const std&colon;&colon;optional lvalue&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U const&amp;&gt;
constexpr
link:#mrdocs-Optional-02-2constructor-0bf[Optional](std::optional&lt;U&gt; const& o) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-02-2constructor-0bf[_» more&period;&period;&period;_]#

Bind to a referenceable object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (
        !std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, Optional&gt; &amp;&amp;
        !std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt; &amp;&amp;
        ok&lowbar;bind&lowbar;v&lt;U&gt;)
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T &amp;&gt;)
link:#mrdocs-Optional-02-2constructor-065[Optional](U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U&gt;);
----

[.small]#link:#mrdocs-Optional-02-2constructor-065[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| Optional to bind to if engaged&period;
| *o*
| Source optional to bind if engaged&period;
| *u*
| Object to bind to&period;
|===

Construct an empty optional reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Optional() noexcept = default;
----

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Optional(link:#mrdocs-Optional-02[Optional] const& other) noexcept = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Optional(link:#mrdocs-Optional-02[Optional]&& other) noexcept = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Construct disengaged from std&colon;&colon;nullopt&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Optional(std::nullopt&lowbar;t value) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to construct from
|===

Construct from another Optional holding a related reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U &amp;, T &amp;&gt;)
Optional(link:#mrdocs-Optional-03[Optional&lt;U&gt;]& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| Optional to bind to if engaged&period;
|===

Construct from std&colon;&colon;optional lvalue&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
Optional(std::optional&lt;U&gt;& o) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *o*
| Source optional to bind if engaged&period;
|===

Construct from a const Optional holding a related reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U const&amp;&gt;
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;const U &amp;, T &amp;&gt;)
Optional(link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| Optional to bind to if engaged&period;
|===

Construct from const std&colon;&colon;optional lvalue&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U const&amp;&gt;
constexpr
Optional(std::optional&lt;U&gt; const& o) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *o*
| Source optional to bind if engaged&period;
|===

Bind to a referenceable object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires (
        !std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, Optional&gt; &amp;&amp;
        !std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt; &amp;&amp;
        ok&lowbar;bind&lowbar;v&lt;U&gt;)
constexpr
explicit(!std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;U, T &amp;&gt;)
Optional(U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Object to bind to&period;
|===

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Copy assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02[Optional]&
link:#mrdocs-Optional-02-operator_assign-0c2[operator&equals;](link:#mrdocs-Optional-02[Optional] const& other) noexcept = default;
----

[.small]#link:#mrdocs-Optional-02-operator_assign-0c2[_» more&period;&period;&period;_]#

Move assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02[Optional]&
link:#mrdocs-Optional-02-operator_assign-08[operator&equals;](link:#mrdocs-Optional-02[Optional]&& other) noexcept = default;
----

[.small]#link:#mrdocs-Optional-02-operator_assign-08[_» more&period;&period;&period;_]#

Reset from std&colon;&colon;nullopt&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02[Optional]&
link:#mrdocs-Optional-02-operator_assign-0d[operator&equals;](std::nullopt&lowbar;t value) noexcept;
----

[.small]#link:#mrdocs-Optional-02-operator_assign-0d[_» more&period;&period;&period;_]#

Assign from another Optional reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
link:#mrdocs-Optional-02[Optional]&
link:#mrdocs-Optional-02-operator_assign-0e[operator&equals;](link:#mrdocs-Optional-03[Optional&lt;U&gt;]& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-02-operator_assign-0e[_» more&period;&period;&period;_]#

Assign from a const Optional reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U const&amp;&gt;
constexpr
link:#mrdocs-Optional-02[Optional]&
link:#mrdocs-Optional-02-operator_assign-0b[operator&equals;](link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

[.small]#link:#mrdocs-Optional-02-operator_assign-0b[_» more&period;&period;&period;_]#

Assign from a referenceable value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&gt;
constexpr
link:#mrdocs-Optional-02[Optional]&
link:#mrdocs-Optional-02-operator_assign-0ce[operator&equals;](U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U&gt;);
----

[.small]#link:#mrdocs-Optional-02-operator_assign-0ce[_» more&period;&period;&period;_]#

Assign from a movable Optional reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&gt;
constexpr
link:#mrdocs-Optional-02[Optional]&
link:#mrdocs-Optional-02-operator_assign-07[operator&equals;](link:#mrdocs-Optional-03[Optional&lt;U&gt;]&& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U&gt;);
----

[.small]#link:#mrdocs-Optional-02-operator_assign-07[_» more&period;&period;&period;_]#

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| Source optional&period;
| *u*
| Reference to bind&period;
|===

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02[Optional]&
operator&equals;(link:#mrdocs-Optional-02[Optional] const& other) noexcept = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02[Optional]&
operator&equals;(link:#mrdocs-Optional-02[Optional]&& other) noexcept = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

Reset from std&colon;&colon;nullopt&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02[Optional]&
operator&equals;(std::nullopt&lowbar;t value) noexcept;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The object to assign from
|===

Assign from another Optional reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&amp;&gt;
constexpr
link:#mrdocs-Optional-02[Optional]&
operator&equals;(link:#mrdocs-Optional-03[Optional&lt;U&gt;]& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U &amp;&gt;);
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| Source optional&period;
|===

Assign from a const Optional reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U const&amp;&gt;
constexpr
link:#mrdocs-Optional-02[Optional]&
operator&equals;(link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, const U &amp;&gt;);
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| Source optional&period;
|===

Assign from a referenceable value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&gt;
constexpr
link:#mrdocs-Optional-02[Optional]&
operator&equals;(U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U&gt;);
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Reference to bind&period;
|===

Assign from a movable Optional reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&gt;
constexpr
link:#mrdocs-Optional-02[Optional]&
operator&equals;(link:#mrdocs-Optional-03[Optional&lt;U&gt;]&& rhs) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U&gt;);
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *rhs*
| Source optional&period;
|===

Bind to a new referenced value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
requires ok&lowbar;bind&lowbar;v&lt;U&gt;
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]&
emplace(U&& u) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;T &amp;, U&gt;);
----

== Return Value

Reference to the bound value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| Referenceable value to bind&period;
|===

Check whether the optional holds a reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
has&lowbar;value() const noexcept;
----

== Return Value

`true` if engaged&period;

Dereference the referenced object&period;

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Dereference the referenced object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]&
link:#mrdocs-Optional-02-operator_star-090[operator&ast;]() noexcept;
----

[.small]#link:#mrdocs-Optional-02-operator_star-090[_» more&period;&period;&period;_]#

Dereference the referenced object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type] const&
link:#mrdocs-Optional-02-operator_star-05[operator&ast;]() const noexcept;
----

[.small]#link:#mrdocs-Optional-02-operator_star-05[_» more&period;&period;&period;_]#

== Return Value

Reference to the bound value&period;

Dereference the referenced object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]&
operator&ast;() noexcept;
----

== Return Value

Reference to the bound value&period;

Dereference the referenced object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type] const&
operator&ast;() const noexcept;
----

== Return Value

Reference to the bound value&period;

Return pointer to the referenced object&period;

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Return pointer to the referenced object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]*
link:#mrdocs-Optional-02-operator_ptr-02[operator&hyphen;&gt;]() noexcept;
----

[.small]#link:#mrdocs-Optional-02-operator_ptr-02[_» more&period;&period;&period;_]#

Return pointer to the referenced object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type] const*
link:#mrdocs-Optional-02-operator_ptr-07[operator&hyphen;&gt;]() const noexcept;
----

[.small]#link:#mrdocs-Optional-02-operator_ptr-07[_» more&period;&period;&period;_]#

== Return Value

Pointer to the bound value&period;

Return pointer to the referenced object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]*
operator&hyphen;&gt;() noexcept;
----

== Return Value

Pointer to the bound value&period;

Return pointer to the referenced object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type] const*
operator&hyphen;&gt;() const noexcept;
----

== Return Value

Pointer to the bound value&period;

Disengage the optional&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
reset() noexcept;
----

Exchange the contained value with another Optional&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(link:#mrdocs-Optional-02[Optional]& other) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Optional to swap with&period;
|===

`value` overloads

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Access the referenced object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]&
link:#mrdocs-Optional-02-value-01[value]() &amp; noexcept;
----

[.small]#link:#mrdocs-Optional-02-value-01[_» more&period;&period;&period;_]#

Access the referenced object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type] const&
link:#mrdocs-Optional-02-value-00[value]() const &amp; noexcept;
----

[.small]#link:#mrdocs-Optional-02-value-00[_» more&period;&period;&period;_]#

Access the referenced object (rvalue overload)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]&
link:#mrdocs-Optional-02-value-05[value]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Optional-02-value-05[_» more&period;&period;&period;_]#

Access the referenced object (const rvalue overload)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type] const&
link:#mrdocs-Optional-02-value-02[value]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Optional-02-value-02[_» more&period;&period;&period;_]#

== Return Value

* Reference to the bound value&period;
* Const reference to the bound value&period;

Access the referenced object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]&
value() &amp; noexcept;
----

== Return Value

Reference to the bound value&period;

Access the referenced object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type] const&
value() const &amp; noexcept;
----

== Return Value

Const reference to the bound value&period;

Access the referenced object (rvalue overload)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type]&
value() &amp;&amp; noexcept;
----

== Return Value

Reference to the bound value&period;

Access the referenced object (const rvalue overload)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Optional-02-value_type[value&lowbar;type] const&
value() const &amp;&amp; noexcept;
----

== Return Value

Const reference to the bound value&period;

Return true when the optional holds a reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
operator bool() const noexcept;
----

== Return Value

true when the optional holds a reference&period;

Return true because Optional&lt;T&amp;&gt; never allocates storage&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
is&lowbar;inlined() noexcept;
----

== Return Value

`true` always&period;

Reference to output stream used by handlebars

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class OutputRef;
----

== Description

This class is used to internally pass an output stream to the handlebars environment&period;

It allows many types to be used as output streams, including std&colon;&colon;string, std&colon;&colon;ostream, llvm&colon;&colon;raw&lowbar;string&lowbar;ostream, and others&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-OutputRef-2constructor-0f[`OutputRef`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-OutputRef-getIndent[`getIndent`] 
| Return the current indentation level&period;
| link:#mrdocs-OutputRef-setIndent[`setIndent`] 
| Set the indentation level applied to writes&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-operator_lshift-0a[mrdocs::operator&lt;&lt;]`
| Write to output
| `link:#mrdocs-operator_lshift-0f[mrdocs::operator&lt;&lt;]`
| Write to output
| `link:#mrdocs-operator_lshift-0e9[mrdocs::operator&lt;&lt;]`
| Write to output
| `link:#mrdocs-operator_lshift-01[mrdocs::operator&lt;&lt;]`
| Write to output
| `link:#mrdocs-Handlebars[mrdocs::Handlebars]`
| A handlebars environment
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-HTMLEscape-04[`HTMLEscape`]
| HTML escapes the specified string
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

Constructor for std&colon;&colon;ostream&amp; output


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Os&gt;
requires std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;Os&ast;, std&colon;&colon;ostream&ast;&gt; &amp;&amp;
        (!detail&colon;&colon;StdLHROStreamable&lt;Os&gt;)
link:#mrdocs-OutputRef-2constructor-0d[OutputRef](Os& os);
----

[.small]#link:#mrdocs-OutputRef-2constructor-0d[_» more&period;&period;&period;_]#

Constructor for llvm&colon;&colon;raw&lowbar;string&lowbar;ostream output


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Os&gt;
requires std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;Os&ast;, std&colon;&colon;ostream&ast;&gt;
link:#mrdocs-OutputRef-2constructor-08[OutputRef](Os& os);
----

[.small]#link:#mrdocs-OutputRef-2constructor-08[_» more&period;&period;&period;_]#

Constructor for std&colon;&colon;string output


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; St&gt;
requires std&colon;&colon;same&lowbar;as&lt;typename St&colon;&colon;value&lowbar;type, char&gt;
link:#mrdocs-OutputRef-2constructor-0b[OutputRef](St& st);
----

[.small]#link:#mrdocs-OutputRef-2constructor-0b[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The output stream to write to
| *st*
| The string to append to
|===

Constructor for std&colon;&colon;ostream&amp; output

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Os&gt;
requires std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;Os&ast;, std&colon;&colon;ostream&ast;&gt; &amp;&amp;
        (!detail&colon;&colon;StdLHROStreamable&lt;Os&gt;)
OutputRef(Os& os);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The output stream to write to
|===

Constructor for llvm&colon;&colon;raw&lowbar;string&lowbar;ostream output

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Os&gt;
requires std&colon;&colon;is&lowbar;convertible&lowbar;v&lt;Os&ast;, std&colon;&colon;ostream&ast;&gt;
OutputRef(Os& os);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The output stream to write to
|===

Constructor for std&colon;&colon;string output

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; St&gt;
requires std&colon;&colon;same&lowbar;as&lt;typename St&colon;&colon;value&lowbar;type, char&gt;
OutputRef(St& st);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *st*
| The string to append to
|===

Return the current indentation level&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
getIndent() const noexcept;
----

== Return Value

the current indentation level&period;

Set the indentation level applied to writes&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
setIndent(std::size&lowbar;t indent);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *indent*
| Number of spaces to indent&period;
|===

Combines multiple callable types into a single overloaded function object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Ts&gt;
struct Overload
    : Ts&period;&period;&period;
----

== Description

This is the canonical &quot;overloaded pattern&quot; implemented as a class template&period; It inherits from all provided callables and brings in their operator()s, so the resulting object can be called with whichever overload matches&period;

Typical use&hyphen;cases include visiting std&colon;&colon;variant and building small ad&hyphen;hoc pattern&hyphen;matching style dispatchers&period;

[,cpp]
----
auto f = fn::makeOverload(
 [](int i) { return i * 2; },
 [](const std::string& s) { return s.size(); }
);
auto a = f(21);        // calls int overload
auto b = f(std::string("hello")); // calls string overload
----
== Base Classes

[cols="1,4"]
|===
|Name|Description

| `Ts&period;&period;&period;`
| 
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Overload-09-2constructor[`Overload`]         [.small]#[constructor]#
| Constructs an Overload from the given callables&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-makeOverload[`makeOverload`]
| Factory function that creates an Overload from the given callables&period;
|===

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *Ts*
| The callable types to combine (lambdas, function objects, etc&period;)
|===

Constructs an Overload from the given callables&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
Overload(Ts&period;&period;&period; xs) noexcept((std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;Ts&gt; &amp;&amp; &period;&period;&period;));
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *xs*
| The callables to store&period;
|===

Represents a set of function overloads&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct OverloadsSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Overloads&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Overloads&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-OverloadsSymbol-2constructor-02[`OverloadsSymbol`]         [.small]#[constructor]#
| Constructors
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-OverloadsSymbol-isConcept[`isConcept`] 
| link:#mrdocs-OverloadsSymbol-isEnum[`isEnum`] 
| link:#mrdocs-OverloadsSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-OverloadsSymbol-isFunction[`isFunction`] 
| link:#mrdocs-OverloadsSymbol-isGuide[`isGuide`] 
| link:#mrdocs-OverloadsSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-OverloadsSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-OverloadsSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-OverloadsSymbol-isRecord[`isRecord`] 
| link:#mrdocs-OverloadsSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-OverloadsSymbol-isUsing[`isUsing`] 
| link:#mrdocs-OverloadsSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-OverloadsSymbol-FuncClass[`FuncClass`] 
| The class of the functions&period;
| link:#mrdocs-OverloadsSymbol-Members[`Members`] 
| The members of the overload set&period;
| link:#mrdocs-OverloadsSymbol-OverloadedOperator[`OverloadedOperator`] 
| The overloaded operator, if any&period;
| link:#mrdocs-OverloadsSymbol-ReturnType[`ReturnType`] 
| Info about the return type of these function overloads&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-OverloadsSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-addMember[`addMember`]
| Append a new function overload to the set&period;
| link:#mrdocs-allMembers-04[`allMembers`]
| Access the list of overload members&period;
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

Create an empty overload set for the given ID&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-OverloadsSymbol-2constructor-078[OverloadsSymbol](link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

[.small]#link:#mrdocs-OverloadsSymbol-2constructor-078[_» more&period;&period;&period;_]#

Create an overload set under the given parent and name&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-OverloadsSymbol-2constructor-07d[OverloadsSymbol](
    link:#mrdocs-SymbolID[SymbolID] const& Parent,
    std::string&lowbar;view Name,
    link:#mrdocs-AccessKind[AccessKind] Access,
    bool isStatic) noexcept;
----

[.small]#link:#mrdocs-OverloadsSymbol-2constructor-07d[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *Parent*
| Owning symbol ID&period;
| *Name*
| Unqualified name shared by the overloads&period;
| *Access*
| Access specifier when the overloads are members&period;
| *isStatic*
| Whether the overload set refers to static functions&period;
|===

Create an empty overload set for the given ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
OverloadsSymbol(link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to copy construct from
|===

Create an overload set under the given parent and name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
OverloadsSymbol(
    link:#mrdocs-SymbolID[SymbolID] const& Parent,
    std::string&lowbar;view Name,
    link:#mrdocs-AccessKind[AccessKind] Access,
    bool isStatic) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *Parent*
| Owning symbol ID&period;
| *Name*
| Unqualified name shared by the overloads&period;
| *Access*
| Access specifier when the overloads are members&period;
| *isStatic*
| Whether the overload set refers to static functions&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

The class of the functions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-FunctionClass[FunctionClass] FuncClass = FunctionClass&colon;&colon;Normal;
----

The members of the overload set&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Members;
----

The overloaded operator, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OperatorKind[OperatorKind] OverloadedOperator = OperatorKind&colon;&colon;None;
----

Info about the return type of these function overloads&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] ReturnType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Description

If all overloads have the same return type, this contains that type&period; Otherwise, it contains `auto` to indicate that the return type varies according to the parameters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

Represents a single function parameter

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Param final
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Param-2constructor-03[`Param`]         [.small]#[constructor]#
| Constructors
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Param-Default[`Default`] 
| The default argument for this parameter, if any
| link:#mrdocs-Param-Name[`Name`] 
| The parameter name&period;
| link:#mrdocs-Param-Type[`Type`] 
| The type of this parameter
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

Create an empty parameter with an `auto` type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Param-2constructor-0d[Param]() = default;
----

[.small]#link:#mrdocs-Param-2constructor-0d[_» more&period;&period;&period;_]#

Construct a parameter with type, name, and default expression&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Param-2constructor-00[Param](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;]&& type,
    std::string&& name,
    std::string&& def&lowbar;arg);
----

[.small]#link:#mrdocs-Param-2constructor-00[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *type*
| Parameter type&period;
| *name*
| Parameter identifier&period;
| *def&lowbar;arg*
| Default argument expression, if present&period;
|===

Create an empty parameter with an `auto` type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Param() = default;
----

Construct a parameter with type, name, and default expression&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Param(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;]&& type,
    std::string&& name,
    std::string&& def&lowbar;arg);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *type*
| Parameter type&period;
| *name*
| Parameter identifier&period;
| *def&lowbar;arg*
| Default argument expression, if present&period;
|===

The default argument for this parameter, if any

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;std::string&gt;] Default;
----

The parameter name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;std::string&gt;] Name;
----

The type of this parameter

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] Type = Polymorphic&lt;struct Type&gt;(AutoType&lcub;&rcub;);
----

The result of a parse operation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ParseResult;
----

== Description

This class holds the result of a parse operation&period; The structure is similar to `std&colon;&colon;from&lowbar;chars&lowbar;result`, where we have a `ptr` member that points to the first character not parsed, and a `ec` member that holds the error code&period;

If parsing was successful, then `ec` stores a default constructed `Error` object, which indicates success&period; The `operator bool` can also be used to check for success&period;

The typical format of a parsing function is&colon;

[,cpp]
----
ParseResult
parseType(
    char const* first,
    char const* last,
    Type& value);
----
where more parameters can be defined as needed for parsing options&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ParseResult-2conversion[`operator bool`] 
| Return true if parsing succeeded&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ParseResult-ec[`ec`] 
| Error status for the parse operation&period;
| link:#mrdocs-ParseResult-ptr[`ptr`] 
| Pointer to the first unparsed character&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-operator_eq-01e[mrdocs::operator&equals;&equals;]`
| Equality operator
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-parse-0a[`parse`]
| Parse a string view
|===

Return true if parsing succeeded&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
operator bool() const noexcept;
----

== Return Value

`true` when `ec` is not a failure&period;

Error status for the parse operation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Error[Error] ec;
----

Pointer to the first unparsed character&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
char const* ptr;
----

A glob pattern matcher for paths

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class PathGlobPattern;
----

== Description

A glob pattern matcher where &quot;&ast;&quot; does not match path separators&period; The pattern &quot;&ast;&ast;&quot; can be used to match any number of path separators&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-PathGlobPattern-2constructor-0c[`PathGlobPattern`]         [.small]#[constructor]#
| Construct an empty PathGlobPattern&period;
| link:#mrdocs-PathGlobPattern-isLiteral[`isLiteral`] 
| Checks if the glob pattern is a literal string&period;
| link:#mrdocs-PathGlobPattern-match[`match`] 
| Matches the given string against the glob pattern&period;
| link:#mrdocs-PathGlobPattern-matchPatternPrefix[`matchPatternPrefix`] 
| Matches the start of a given string against the glob pattern&period;
| link:#mrdocs-PathGlobPattern-pattern[`pattern`] 
| Returns the glob pattern&period;
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-PathGlobPattern-create-09[`create`] 
| Constructs a PathGlobPattern with the given pattern&period;
|===

Construct an empty PathGlobPattern&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

Construct an empty PathGlobPattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-PathGlobPattern-2constructor-05[PathGlobPattern]() = default;
----

[.small]#link:#mrdocs-PathGlobPattern-2constructor-05[_» more&period;&period;&period;_]#

Construct an empty PathGlobPattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-PathGlobPattern-2constructor-02[PathGlobPattern](link:#mrdocs-GlobPattern[GlobPattern] glob);
----

[.small]#link:#mrdocs-PathGlobPattern-2constructor-02[_» more&period;&period;&period;_]#

Construct an empty PathGlobPattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
PathGlobPattern() = default;
----

== Description

An empty PathGlobPattern will never match any string&period;

Construct an empty PathGlobPattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
PathGlobPattern(link:#mrdocs-GlobPattern[GlobPattern] glob);
----

== Description

An empty PathGlobPattern will never match any string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *glob*
| The object to construct from
|===

Checks if the glob pattern is a literal string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isLiteral() const;
----

== Description

This function determines if the glob pattern does not contain any special characters&period; In other words, it matches a single string&period;

== Return Value

true if the glob pattern is a literal string, false otherwise&period;

Matches the given string against the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
match(std::string&lowbar;view const str) const;
----

== Return Value

true if the string matches the pattern, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to match against the pattern&period;
|===

Matches the start of a given string against the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
matchPatternPrefix(std::string&lowbar;view prefix) const;
----

== Description

This function determines if the given string with the specified `prefix` can potentially match the glob pattern&period;

If the string matches the start of the pattern without failure, even if there are characters left in the string or the pattern, the function returns true&period;

== Return Value

true if the string prefix matches the pattern, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *prefix*
| The string to match against the pattern&period;
|===

Returns the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
pattern() const;
----

== Return Value

The glob pattern as a string view&period;

Constructs a PathGlobPattern with the given pattern&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

Constructs a PathGlobPattern with the given pattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;PathGlobPattern&gt;]
link:#mrdocs-PathGlobPattern-create-0e[create](std::string&lowbar;view const pattern);
----

[.small]#link:#mrdocs-PathGlobPattern-create-0e[_» more&period;&period;&period;_]#

Constructs a PathGlobPattern with the given pattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;PathGlobPattern&gt;]
link:#mrdocs-PathGlobPattern-create-05[create](
    std::string&lowbar;view const pattern,
    link:#mrdocs-Optional-03[Optional&lt;std::size&lowbar;t&gt;] maxSubGlobs);
----

[.small]#link:#mrdocs-PathGlobPattern-create-05[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| The glob pattern to use for matching&period;
| *maxSubGlobs*
| The maximum number of subpatterns allowed&period;
|===

Constructs a PathGlobPattern with the given pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;PathGlobPattern&gt;]
create(std::string&lowbar;view const pattern);
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| The glob pattern to use for matching&period;
|===

Constructs a PathGlobPattern with the given pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;PathGlobPattern&gt;]
create(
    std::string&lowbar;view const pattern,
    link:#mrdocs-Optional-03[Optional&lt;std::size&lowbar;t&gt;] maxSubGlobs);
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| The glob pattern to use for matching&period;
| *maxSubGlobs*
| The maximum number of subpatterns allowed&period;
|===

Pointer type wrapper&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;PointerType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct PointerType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Pointer&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;Pointer&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-PointerType-isArray[`isArray`] 
| link:#mrdocs-PointerType-isAuto[`isAuto`] 
| link:#mrdocs-PointerType-isDecltype[`isDecltype`] 
| link:#mrdocs-PointerType-isFunction[`isFunction`] 
| link:#mrdocs-PointerType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-PointerType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-PointerType-isNamed[`isNamed`] 
| link:#mrdocs-PointerType-isPointer[`isPointer`] 
| link:#mrdocs-PointerType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-PointerType-PointeeType[`PointeeType`] 
| The pointee type, defaults to `auto` when unknown&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-PointerType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

The pointee type, defaults to `auto` when unknown&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;PointerType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] PointeeType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

A polymorphic value&hyphen;type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
class Polymorphic;
----

== Description

This class supports polymorphic objects with value&hyphen;like semantics&period;

It implements a tweaked version of std&colon;&colon;polymorphic, based on the reference implementation for P3019R14&period; Differences are&colon; It implements comparison operators with a very project&hyphen;specific design&period; Fixed allocator, not parametrizable&period; No initializer&lowbar;list constructor&period;

== Deep copies

To copy polymorphic objects, the class uses the copy constructor of the owned derived&hyphen;type object when copying to another value&period; Similarly, to allow the correct destruction of derived objects, it uses the destructor of the owned derived&hyphen;type object in the destructor&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Polymorphic-const_pointer[`const&lowbar;pointer`] 
| Const pointer to the held object&period;
| link:#mrdocs-Polymorphic-pointer[`pointer`] 
| Mutable pointer to the held object&period;
| link:#mrdocs-Polymorphic-value_type[`value&lowbar;type`] 
| Base value type&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Polymorphic-2constructor-0b[`Polymorphic`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-Polymorphic-2destructor[`&#126;Polymorphic`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-Polymorphic-operator_assign-02[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-Polymorphic-operator_star-00[`operator&ast;`] 
| Dereference operators
| link:#mrdocs-Polymorphic-operator_ptr-01[`operator&hyphen;&gt;`] 
| Member access operators
| link:#mrdocs-Polymorphic-valueless_after_move[`valueless&lowbar;after&lowbar;move`] 
| Return true if the object has been moved&hyphen;from and is disengaged&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-swap-07ce[mrdocs::swap]`
| 
| `link:#mrdocs-nullable_traits-0b[mrdocs::nullable&lowbar;traits]`
| nullable&lowbar;traits&lt;T&gt; defines how to treat a T as “nullable” without an external engaged bit&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-CompareDerived-06[`CompareDerived`]
| Compares two polymorphic objects that have visit functions
| link:#mrdocs-cast-0a[`cast`]
| Dynamic cast returning const reference&semi; asserts on failure&period;
| link:#mrdocs-cast-0c[`cast`]
| Dynamic cast returning reference&semi; asserts on failure&period;
| link:#mrdocs-cast_or_null-07[`cast&lowbar;or&lowbar;null`]
| Dynamic cast pointer&semi; returns nullptr when pp is null&period;
| link:#mrdocs-cast_or_null-0b[`cast&lowbar;or&lowbar;null`]
| Dynamic cast pointer&semi; returns nullptr when pp is null (const)&period;
| link:#mrdocs-dyn_cast-01[`dyn&lowbar;cast`]
| Dynamic cast returning pointer or nullptr&period;
| link:#mrdocs-dyn_cast-08[`dyn&lowbar;cast`]
| Dynamic cast returning pointer or nullptr (const overload)&period;
| link:#mrdocs-dyn_cast_or_null-04[`dyn&lowbar;cast&lowbar;or&lowbar;null`]
| Dynamic cast if pointer is non&hyphen;null and engaged, else nullptr (const)&period;
| link:#mrdocs-dyn_cast_or_null-0b[`dyn&lowbar;cast&lowbar;or&lowbar;null`]
| Dynamic cast if pointer is non&hyphen;null and engaged, else nullptr&period;
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innermostType-09[`innermostType`]
| Return the innermost type (mutable overload)&period;
| link:#mrdocs-innermostType-0b[`innermostType`]
| Return the innermost type&period;
| link:#mrdocs-isa[`isa`]
| Return true if the polymorphic object holds a value of type To&period;
| link:#mrdocs-isa_or_null[`isa&lowbar;or&lowbar;null`]
| Return true if pointer is non&hyphen;null and referent is of type To&period;
| link:#mrdocs-operator_3way-03[`operator&lt;&equals;&gt;`]
| Compare polymorphic template arguments&period;
| link:#mrdocs-operator_3way-04d[`operator&lt;&equals;&gt;`]
| Compare two polymorphic names by visitor dispatch&period;
| link:#mrdocs-operator_3way-0820[`operator&lt;&equals;&gt;`]
| Compare polymorphic template parameters&period;
| link:#mrdocs-operator_3way-0822[`operator&lt;&equals;&gt;`]
| Three&hyphen;way comparison of two polymorphic objects&period;
| link:#mrdocs-operator_3way-0b[`operator&lt;&equals;&gt;`]
| Compare two polymorphic types by visitor dispatch&period;
| link:#mrdocs-operator_eq-02[`operator&equals;&equals;`]
| Equality for two polymorphic types&period;
| link:#mrdocs-operator_eq-06c[`operator&equals;&equals;`]
| Equality comparison of two polymorphic objects&period;
| link:#mrdocs-operator_eq-0c4[`operator&equals;&equals;`]
| Equality for two polymorphic names&period;
| link:#mrdocs-operator_eq-0c6[`operator&equals;&equals;`]
| Equality for polymorphic template arguments&period;
| link:#mrdocs-operator_eq-0f[`operator&equals;&equals;`]
| Equality helper for polymorphic template parameters&period;
| link:#mrdocs-doc-isEmpty-00[`doc&colon;&colon;isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-isEmpty-03[`doc&colon;&colon;isEmpty`]
| Determine if the inline is empty
| link:#mrdocs-doc-ltrim-02[`doc&colon;&colon;ltrim`]
| Removes leading whitespace from the inline element&period;
| link:#mrdocs-doc-ltrim-05[`doc&colon;&colon;ltrim`]
| Removes leading whitespace from the block&period;
| link:#mrdocs-doc-operator_3way-016[`doc&colon;&colon;operator&lt;&equals;&gt;`]
| Three&hyphen;way comparison between polymorphic block wrappers&period;
| link:#mrdocs-doc-operator_3way-0a[`doc&colon;&colon;operator&lt;&equals;&gt;`]
| Three&hyphen;way comparison for polymorphic inline elements&period;
| link:#mrdocs-doc-operator_eq-00c[`doc&colon;&colon;operator&equals;&equals;`]
| Equality delegates to the three&hyphen;way comparison&period;
| link:#mrdocs-doc-operator_eq-01[`doc&colon;&colon;operator&equals;&equals;`]
| Equality delegates to the three&hyphen;way comparison&period;
| link:#mrdocs-doc-rtrim-02[`doc&colon;&colon;rtrim`]
| Removes trailing whitespace from the block&period;
| link:#mrdocs-doc-rtrim-0f[`doc&colon;&colon;rtrim`]
| Removes trailing whitespace from the inline element&period;
| link:#mrdocs-doc-trim-01[`doc&colon;&colon;trim`]
| Removes leading and trailing whitespace from the block&period;
| link:#mrdocs-doc-trim-07f[`doc&colon;&colon;trim`]
| Removes leading and trailing whitespace from the inline element&period;
|===

Const pointer to the held object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;pointer = T const*;
----

Mutable pointer to the held object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using pointer = T*;
----

Base value type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = T;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Polymorphic-2constructor-0f[Polymorphic](link:#mrdocs-Polymorphic[Polymorphic] const& V);
----

[.small]#link:#mrdocs-Polymorphic-2constructor-0f[_» more&period;&period;&period;_]#

Move constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Polymorphic-2constructor-09[Polymorphic](link:#mrdocs-Polymorphic[Polymorphic]&& V) noexcept;
----

[.small]#link:#mrdocs-Polymorphic-2constructor-09[_» more&period;&period;&period;_]#

Forwarding constructor from a derived U&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
explicit
link:#mrdocs-Polymorphic-2constructor-02[Polymorphic](U&& u)
requires (!std&colon;&colon;same&lowbar;as&lt;Polymorphic, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;) &amp;&amp;
                 std&colon;&colon;copy&lowbar;constructible&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt; &amp;&amp;
                 std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, T&gt;;
----

[.small]#link:#mrdocs-Polymorphic-2constructor-02[_» more&period;&period;&period;_]#

In&hyphen;place constructor for a specific derived U&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Ts&gt;
constexpr
explicit
link:#mrdocs-Polymorphic-2constructor-06[Polymorphic](
    std::in&lowbar;place&lowbar;type&lowbar;t&lt;U&gt;,
    Ts&&&period;&period;&period; ts)
requires std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, U&gt; &amp;&amp;
                 std&colon;&colon;constructible&lowbar;from&lt;U, Ts&amp;&amp;&period;&period;&period;&gt; &amp;&amp;
                 std&colon;&colon;copy&lowbar;constructible&lt;U&gt; &amp;&amp; std&colon;&colon;derived&lowbar;from&lt;U, T&gt;;
----

[.small]#link:#mrdocs-Polymorphic-2constructor-06[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *V*
| Source object&period;
| *ts*
| Arguments to forward to U&apos;s constructor&period;
|===

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Polymorphic(link:#mrdocs-Polymorphic[Polymorphic] const& V);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *V*
| Source object&period;
|===

Move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Polymorphic(link:#mrdocs-Polymorphic[Polymorphic]&& V) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *V*
| Source object (emptied on return)&period;
|===

Forwarding constructor from a derived U&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class U&gt;
constexpr
explicit
Polymorphic(U&& u)
requires (!std&colon;&colon;same&lowbar;as&lt;Polymorphic, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt;) &amp;&amp;
                 std&colon;&colon;copy&lowbar;constructible&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;&gt; &amp;&amp;
                 std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, T&gt;;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *u*
| The object to move construct from
|===

In&hyphen;place constructor for a specific derived U&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Ts&gt;
constexpr
explicit
Polymorphic(
    std::in&lowbar;place&lowbar;type&lowbar;t&lt;U&gt;,
    Ts&&&period;&period;&period; ts)
requires std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;U&gt;, U&gt; &amp;&amp;
                 std&colon;&colon;constructible&lowbar;from&lt;U, Ts&amp;&amp;&period;&period;&period;&gt; &amp;&amp;
                 std&colon;&colon;copy&lowbar;constructible&lt;U&gt; &amp;&amp; std&colon;&colon;derived&lowbar;from&lt;U, T&gt;;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ts*
| Arguments to forward to U&apos;s constructor&period;
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
&#126;Polymorphic();
----

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Copy assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Polymorphic[Polymorphic]&
link:#mrdocs-Polymorphic-operator_assign-0c[operator&equals;](link:#mrdocs-Polymorphic[Polymorphic] const& V);
----

[.small]#link:#mrdocs-Polymorphic-operator_assign-0c[_» more&period;&period;&period;_]#

Move assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Polymorphic[Polymorphic]&
link:#mrdocs-Polymorphic-operator_assign-04[operator&equals;](link:#mrdocs-Polymorphic[Polymorphic]&& V) noexcept;
----

[.small]#link:#mrdocs-Polymorphic-operator_assign-04[_» more&period;&period;&period;_]#

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *V*
| Source object&period;
|===

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Polymorphic[Polymorphic]&
operator&equals;(link:#mrdocs-Polymorphic[Polymorphic] const& V);
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *V*
| Source object&period;
|===

Move assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Polymorphic[Polymorphic]&
operator&equals;(link:#mrdocs-Polymorphic[Polymorphic]&& V) noexcept;
----

== Return Value

&ast;this&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *V*
| Source object (emptied on return)&period;
|===

Dereference operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Dereference to the held object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&
link:#mrdocs-Polymorphic-operator_star-07[operator&ast;]() noexcept;
----

[.small]#link:#mrdocs-Polymorphic-operator_star-07[_» more&period;&period;&period;_]#

Dereference to the held object (const)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&
link:#mrdocs-Polymorphic-operator_star-02[operator&ast;]() const noexcept;
----

[.small]#link:#mrdocs-Polymorphic-operator_star-02[_» more&period;&period;&period;_]#

== Return Value

* Reference to the contained value&period;
* Const reference to the contained value&period;

Dereference to the held object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&
operator&ast;() noexcept;
----

== Return Value

Reference to the contained value&period;

Dereference to the held object (const)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&
operator&ast;() const noexcept;
----

== Return Value

Const reference to the contained value&period;

Member access operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Pointer&hyphen;like access to the held object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mrdocs-Polymorphic-pointer[pointer]
link:#mrdocs-Polymorphic-operator_ptr-00[operator&hyphen;&gt;]() noexcept;
----

[.small]#link:#mrdocs-Polymorphic-operator_ptr-00[_» more&period;&period;&period;_]#

Pointer&hyphen;like access to the held object (const)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mrdocs-Polymorphic-const_pointer[const&lowbar;pointer]
link:#mrdocs-Polymorphic-operator_ptr-07[operator&hyphen;&gt;]() const noexcept;
----

[.small]#link:#mrdocs-Polymorphic-operator_ptr-07[_» more&period;&period;&period;_]#

== Return Value

Pointer to the contained value&period;

Pointer&hyphen;like access to the held object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mrdocs-Polymorphic-pointer[pointer]
operator&hyphen;&gt;() noexcept;
----

== Return Value

Pointer to the contained value&period;

Pointer&hyphen;like access to the held object (const)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mrdocs-Polymorphic-const_pointer[const&lowbar;pointer]
operator&hyphen;&gt;() const noexcept;
----

== Return Value

Pointer to the contained value&period;

Return true if the object has been moved&hyphen;from and is disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
valueless&lowbar;after&lowbar;move() const noexcept;
----

== Return Value

`true` when empty&period;

An rvalue reference type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;RValueReferenceType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct RValueReferenceType final
    : link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;RValueReference&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TypeCommonBase-0e[TypeCommonBase&lt;TypeKind&colon;&colon;RValueReference&gt;]`
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-RValueReferenceType-isArray[`isArray`] 
| link:#mrdocs-RValueReferenceType-isAuto[`isAuto`] 
| link:#mrdocs-RValueReferenceType-isDecltype[`isDecltype`] 
| link:#mrdocs-RValueReferenceType-isFunction[`isFunction`] 
| link:#mrdocs-RValueReferenceType-isLValueReference[`isLValueReference`] 
| link:#mrdocs-RValueReferenceType-isMemberPointer[`isMemberPointer`] 
| link:#mrdocs-RValueReferenceType-isNamed[`isNamed`] 
| link:#mrdocs-RValueReferenceType-isPointer[`isPointer`] 
| link:#mrdocs-RValueReferenceType-isRValueReference[`isRValueReference`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RValueReferenceType-PointeeType[`PointeeType`] 
| The referenced type, defaults to `auto` when unknown&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-RValueReferenceType-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

The referenced type, defaults to `auto` when unknown&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;RValueReferenceType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] PointeeType = Polymorphic&lt;Type&gt;(AutoType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id;
----

Range adapter to expose first&sol;last flags inside range&hyphen;for loops&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Container&gt;
class RangeFor;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RangeFor-0f-iterator[`iterator`] 
| Iterator yielding RangeFor&colon;&colon;value&lowbar;type proxies with first&sol;last flags&period;
| link:#mrdocs-RangeFor-0f-value_type[`value&lowbar;type`] 
| Proxy describing an element plus first&sol;last flags&period;
| link:#mrdocs-RangeFor-0f-const_pointer[`const&lowbar;pointer`] 
| Pointer to const proxy&period;
| link:#mrdocs-RangeFor-0f-const_reference[`const&lowbar;reference`] 
| Reference to const proxy&period;
| link:#mrdocs-RangeFor-0f-difference_type[`difference&lowbar;type`] 
| Signed distance type&period;
| link:#mrdocs-RangeFor-0f-pointer[`pointer`] 
| Pointer to proxy&period;
| link:#mrdocs-RangeFor-0f-reference[`reference`] 
| Reference to proxy&period;
| link:#mrdocs-RangeFor-0f-size_type[`size&lowbar;type`] 
| Unsigned size type&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RangeFor-0f-2constructor[`RangeFor`]         [.small]#[constructor]#
| Construct a range wrapper over a container&period;
| link:#mrdocs-RangeFor-0f-begin[`begin`] 
| Iterator to first element&period;
| link:#mrdocs-RangeFor-0f-end[`end`] 
| Iterator past the last element&period;
|===

Pointer to const proxy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;pointer = link:#mrdocs-RangeFor-0f-value_type[value&lowbar;type] const*;
----

Reference to const proxy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;reference = link:#mrdocs-RangeFor-0f-value_type[value&lowbar;type] const&;
----

Signed distance type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using difference&lowbar;type = std::ptrdiff&lowbar;t;
----

Pointer to proxy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using pointer = link:#mrdocs-RangeFor-0f-value_type[value&lowbar;type]*;
----

Reference to proxy&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reference = link:#mrdocs-RangeFor-0f-value_type[value&lowbar;type]&;
----

Unsigned size type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = std::size&lowbar;t;
----

Iterator yielding RangeFor&colon;&colon;value&lowbar;type proxies with first&sol;last flags&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class iterator;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RangeFor-0f-iterator-iterator_category[`iterator&lowbar;category`] 
| Iterator category forwarded from container&period;
| link:#mrdocs-RangeFor-0f-iterator-pointer[`pointer`] 
| Pointer type (unused)&period;
| link:#mrdocs-RangeFor-0f-iterator-reference[`reference`] 
| Reference type&period;
| link:#mrdocs-RangeFor-0f-iterator-size_type[`size&lowbar;type`] 
| Size type alias&period;
| link:#mrdocs-RangeFor-0f-iterator-value_type[`value&lowbar;type`] 
| Proxy value type&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RangeFor-0f-iterator-2constructor-07e[`iterator`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-RangeFor-0f-iterator-operator_assign[`operator&equals;`] 
| Copy assignment&period;
| link:#mrdocs-RangeFor-0f-iterator-operator_star[`operator&ast;`] 
| Dereference to proxy value&period;
| link:#mrdocs-RangeFor-0f-iterator-operator_inc-0a[`operator&plus;&plus;`] 
| Increment operators
| link:#mrdocs-RangeFor-0f-iterator-operator_ptr[`operator&hyphen;&gt;`] 
| Return proxy for current element&period;
| link:#mrdocs-RangeFor-0f-iterator-operator_eq[`operator&equals;&equals;`] 
| Equality comparison&period;
| link:#mrdocs-RangeFor-0f-iterator-operator_not_eq[`operator!&equals;`] 
| Inequality comparison&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-RangeFor-0f-value_type[mrdocs::RangeFor::value&lowbar;type]`
| Proxy describing an element plus first&sol;last flags&period;
| `link:#mrdocs-RangeFor-0f[mrdocs::RangeFor]`
| Range adapter to expose first&sol;last flags inside range&hyphen;for loops&period;
|===

Iterator category forwarded from container&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using iterator&lowbar;category = std::iterator&lowbar;traits&lt;Container::iterator&gt;::iterator&lowbar;category;
----

Pointer type (unused)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using pointer = void;
----

Reference type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reference = link:#mrdocs-RangeFor-0f-iterator-value_type[value&lowbar;type];
----

Size type alias&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = std::size&lowbar;t;
----

Proxy value type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = link:#mrdocs-RangeFor-0f-value_type[RangeFor&lt;Container&gt;::value&lowbar;type];
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

Default constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator-2constructor-09[iterator]() = default;
----

[.small]#link:#mrdocs-RangeFor-0f-iterator-2constructor-09[_» more&period;&period;&period;_]#

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator-2constructor-07a[iterator](link:#mrdocs-RangeFor-0f-iterator[iterator] const& other) = default;
----

[.small]#link:#mrdocs-RangeFor-0f-iterator-2constructor-07a[_» more&period;&period;&period;_]#

Default constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
iterator() = default;
----

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
iterator(link:#mrdocs-RangeFor-0f-iterator[iterator] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator[iterator]&
operator&equals;(link:#mrdocs-RangeFor-0f-iterator[iterator] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Dereference to proxy value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator-reference[reference]
operator&ast;() const noexcept;
----

== Return Value

Reference type&period;

Increment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

Pre&hyphen;increment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator[iterator]&
link:#mrdocs-RangeFor-0f-iterator-operator_inc-01[operator&plus;&plus;]() noexcept;
----

[.small]#link:#mrdocs-RangeFor-0f-iterator-operator_inc-01[_» more&period;&period;&period;_]#

Post&hyphen;increment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator[iterator]
link:#mrdocs-RangeFor-0f-iterator-operator_inc-0c[operator&plus;&plus;](int unused) noexcept;
----

[.small]#link:#mrdocs-RangeFor-0f-iterator-operator_inc-0c[_» more&period;&period;&period;_]#

== Return Value

* &ast;this advanced to next element&period;
* Iterator prior to increment&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *unused*
| Dummy parameter for postfix form&period;
|===

Pre&hyphen;increment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator[iterator]&
operator&plus;&plus;() noexcept;
----

== Return Value

&ast;this advanced to next element&period;

Post&hyphen;increment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator[iterator]
operator&plus;&plus;(int unused) noexcept;
----

== Return Value

Iterator prior to increment&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *unused*
| Dummy parameter for postfix form&period;
|===

Return proxy for current element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator-reference[reference]
operator&hyphen;&gt;() const noexcept;
----

== Return Value

proxy for current element&period;

Equality comparison&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(link:#mrdocs-RangeFor-0f-iterator[iterator] const& it) const noexcept;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *it*
| The right operand
|===

Inequality comparison&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator!&equals;(link:#mrdocs-RangeFor-0f-iterator[iterator] const& it) const noexcept;
----

== Return Value

`true` if the objects are not equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *it*
| The right operand
|===

Proxy describing an element plus first&sol;last flags&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct value&lowbar;type;
----

== Description

Reference to current element&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RangeFor-0f-value_type-operator_ptr[`operator&hyphen;&gt;`] 
| Access members through pointer syntax&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RangeFor-0f-value_type-first[`first`] 
| True if this element is the first in the range&period;
| link:#mrdocs-RangeFor-0f-value_type-last[`last`] 
| True if this element is the last in the range&period;
| link:#mrdocs-RangeFor-0f-value_type-value[`value`] 
| The contained value&period;
|===

Access members through pointer syntax&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-value_type[value&lowbar;type] const*
operator&hyphen;&gt;() const noexcept;
----

== Return Value

Pointer to this proxy&period;

True if this element is the first in the range&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool const first;
----

True if this element is the last in the range&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool const last;
----

The contained value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Container::value&lowbar;type const& value;
----

Construct a range wrapper over a container&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
RangeFor(Container const& C) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *C*
| Container to iterate&period;
|===

Iterator to first element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator[iterator]
begin() const noexcept;
----

== Return Value

Iterator yielding RangeFor&colon;&colon;value&lowbar;type proxies with first&sol;last flags&period;

Iterator past the last element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RangeFor-0f-iterator[iterator]
end() const noexcept;
----

== Return Value

Iterator yielding RangeFor&colon;&colon;value&lowbar;type proxies with first&sol;last flags&period;

The aggregated interface for a given struct, class, or union&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordInterface&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class RecordInterface;
----

== Description

This class represents the public, protected, and private interfaces of a record&period; It is used to generate the &quot;interface&quot; value of the DOM for symbols that represent records or namespaces&period;

The interface is not part of the Corpus&period; It is a temporary structure generated to aggregate the symbols of a record&period; This structure is provided to the user via the DOM&period;

While the members of a Namespace are directly represented with a Tranche, the members of a Record are represented with an Interface&period;

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RecordInterface-Private[`Private`] 
| The aggregated private interfaces&period;
| link:#mrdocs-RecordInterface-Protected[`Protected`] 
| The aggregated protected interfaces&period;
| link:#mrdocs-RecordInterface-Public[`Public`] 
| The aggregated public interfaces&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-allMembers-0e2[`allMembers`]
| Flatten all public&sol;protected&sol;private members&period;
|===

The aggregated private interfaces&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordInterface&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RecordTranche[RecordTranche] Private;
----

== Description

This tranche contains all private members of a record or namespace&period;

The aggregated protected interfaces&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordInterface&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RecordTranche[RecordTranche] Protected;
----

== Description

This tranche contains all protected members of a record or namespace&period;

The aggregated public interfaces&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordInterface&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RecordTranche[RecordTranche] Public;
----

== Description

This tranche contains all public members of a record or namespace&period;

Metadata for struct, class, or union&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct RecordSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Record&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Record&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RecordSymbol-2constructor[`RecordSymbol`]         [.small]#[constructor]#
| Create a record symbol bound to an ID&period;
| link:#mrdocs-RecordSymbol-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare records including bases, members, and flags&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-RecordSymbol-isConcept[`isConcept`] 
| link:#mrdocs-RecordSymbol-isEnum[`isEnum`] 
| link:#mrdocs-RecordSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-RecordSymbol-isFunction[`isFunction`] 
| link:#mrdocs-RecordSymbol-isGuide[`isGuide`] 
| link:#mrdocs-RecordSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-RecordSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-RecordSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-RecordSymbol-isRecord[`isRecord`] 
| link:#mrdocs-RecordSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-RecordSymbol-isUsing[`isUsing`] 
| link:#mrdocs-RecordSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RecordSymbol-Bases[`Bases`] 
| List of immediate bases&period;
| link:#mrdocs-RecordSymbol-Derived[`Derived`] 
| List of derived classes
| link:#mrdocs-RecordSymbol-Friends[`Friends`] 
| List of friends&period;
| link:#mrdocs-RecordSymbol-Interface[`Interface`] 
| Lists of members&period;
| link:#mrdocs-RecordSymbol-IsFinal[`IsFinal`] 
| Whether the class is marked `final`&period;
| link:#mrdocs-RecordSymbol-IsFinalDestructor[`IsFinalDestructor`] 
| Whether the destructor is marked `final`&period;
| link:#mrdocs-RecordSymbol-IsTypeDef[`IsTypeDef`] 
| Whether the record originated from a typedef&hyphen;style declaration&period;
| link:#mrdocs-RecordSymbol-KeyKind[`KeyKind`] 
| Kind of record this is (class, struct, or union)&period;
| link:#mrdocs-RecordSymbol-Template[`Template`] 
| When present, this record is a template or specialization&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-RecordSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-allMembers-0d[`allMembers`]
| View all record members across access levels&period;
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Create a record symbol bound to an ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
RecordSymbol(link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to copy construct from
|===

Compare records including bases, members, and flags&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-RecordSymbol[RecordSymbol] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

List of immediate bases&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;BaseInfo&gt; Bases;
----

List of derived classes

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Derived;
----

List of friends&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;FriendInfo&gt; Friends;
----

Lists of members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RecordInterface[RecordInterface] Interface;
----

Whether the class is marked `final`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsFinal = false;
----

Whether the destructor is marked `final`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsFinalDestructor = false;
----

Whether the record originated from a typedef&hyphen;style declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsTypeDef = false;
----

== Description

Things like anonymous structs in a typedef&colon;

[,cpp]
----
typedef struct { ... } foo_t;
----
are converted into records with the typedef as the Name &plus; this flag set&period;

[NOTE]
====
Alias&hyphen;declarations are not yet distinguished here&period;

====

Kind of record this is (class, struct, or union)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-RecordKeyKind[RecordKeyKind] KeyKind = RecordKeyKind&colon;&colon;Struct;
----

When present, this record is a template or specialization&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;TemplateInfo&gt;] Template;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

A group of members that have the same access specifier&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct RecordTranche;
----

== Description

This struct represents a collection of symbols that share the same access specifier within a record&period;

It includes one vector for each info type allowed in a record, and individual vectors for static functions, types, and function overloads&period;

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-RecordTranche-Concepts[`Concepts`] 
| Member concepts&period;
| link:#mrdocs-RecordTranche-Enums[`Enums`] 
| Enumerations&period;
| link:#mrdocs-RecordTranche-Functions[`Functions`] 
| Member functions&period;
| link:#mrdocs-RecordTranche-Guides[`Guides`] 
| Deduction guides in the class scope&period;
| link:#mrdocs-RecordTranche-NamespaceAliases[`NamespaceAliases`] 
| Namespace aliases declared with this access&period;
| link:#mrdocs-RecordTranche-Records[`Records`] 
| Nested records&period;
| link:#mrdocs-RecordTranche-StaticFunctions[`StaticFunctions`] 
| Static member functions&period;
| link:#mrdocs-RecordTranche-StaticVariables[`StaticVariables`] 
| Static data members&period;
| link:#mrdocs-RecordTranche-Typedefs[`Typedefs`] 
| Typedefs and using aliases&period;
| link:#mrdocs-RecordTranche-Usings[`Usings`] 
| Using&hyphen;declarations that pull members into the class&period;
| link:#mrdocs-RecordTranche-Variables[`Variables`] 
| Data members&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-allMembers-0e7[`allMembers`]
| Join every member list into a single view&period;
|===

Member concepts&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Concepts;
----

Enumerations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Enums;
----

Member functions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Functions;
----

Deduction guides in the class scope&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Guides;
----

Namespace aliases declared with this access&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; NamespaceAliases;
----

Nested records&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Records;
----

Static member functions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; StaticFunctions;
----

Static data members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; StaticVariables;
----

Typedefs and using aliases&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Typedefs;
----

Using&hyphen;declarations that pull members into the class&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Usings;
----

Data members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; Variables;
----

Reference directories used to resolve paths

== Synopsis

Declared in `&lt;mrdocs&sol;Config&sol;ReferenceDirectories&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct ReferenceDirectories;
----

== Description

These are the main reference directories used to resolve paths in the application&period;

All other reference directories come directly from the configuration file&period;

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ReferenceDirectories-cwd[`cwd`] 
| Absolute path to the current working directory&period;
| link:#mrdocs-ReferenceDirectories-mrdocsRoot[`mrdocsRoot`] 
| Absolute path to the MrDocs repository root&period;
|===

Absolute path to the current working directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&sol;ReferenceDirectories&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string cwd;
----

Absolute path to the MrDocs repository root&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Config&sol;ReferenceDirectories&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string mrdocsRoot;
----

Execute a callable when the enclosing scope exits unless dismissed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
class ScopeExit;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ScopeExit-0a-2constructor[`ScopeExit`]         [.small]#[constructor]#
| Construct with a callable to invoke on scope exit&period;
| link:#mrdocs-ScopeExit-0a-2destructor[`&#126;ScopeExit`] [.small]#[destructor]#
| Invoke the stored callable if the guard was not dismissed&period;
| link:#mrdocs-ScopeExit-0a-dismiss[`dismiss`] 
| Prevent the callable from running on destruction&period;
|===

Construct with a callable to invoke on scope exit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
ScopeExit(F onExitScope);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *onExitScope*
| Callable executed unless dismissed&period;
|===

Invoke the stored callable if the guard was not dismissed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;ScopeExit();
----

Prevent the callable from running on destruction&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
dismiss();
----

RAII helper that restores a referenced value on scope exit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
class ScopeExitRestore;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ScopeExitRestore-01-2constructor-00[`ScopeExitRestore`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-ScopeExitRestore-01-2destructor[`&#126;ScopeExitRestore`] [.small]#[destructor]#
| Restore the previous value unless dismissed&period;
| link:#mrdocs-ScopeExitRestore-01-dismiss[`dismiss`] 
| Prevent restoration on destruction&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

Restore `ref` to its previous value when the scope ends


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-ScopeExitRestore-01-2constructor-095[ScopeExitRestore](T& ref);
----

[.small]#link:#mrdocs-ScopeExitRestore-01-2constructor-095[_» more&period;&period;&period;_]#

Temporarily set `ref` to `next` and restore it when the scope ends


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;T&gt; T2&gt;
explicit
link:#mrdocs-ScopeExitRestore-01-2constructor-09f[ScopeExitRestore](
    T& ref,
    T2 next);
----

[.small]#link:#mrdocs-ScopeExitRestore-01-2constructor-09f[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ref*
| The variable to modify and eventually restore&period;
| *next*
| The temporary value assigned to `ref` for the scope&period;
|===

Restore `ref` to its previous value when the scope ends

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
ScopeExitRestore(T& ref);
----

== Description

Store the current value of `ref` and restore it when this object goes out of scope, unless `dismiss()` is called&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ref*
| The object to copy construct from
|===

Temporarily set `ref` to `next` and restore it when the scope ends

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;T&gt; T2&gt;
explicit
ScopeExitRestore(
    T& ref,
    T2 next);
----

== Description

Store the current value of `ref`, set it to `next`, and restore the previous value when this object goes out of scope, unless `dismiss()` is called&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ref*
| The variable to modify and eventually restore&period;
| *next*
| The temporary value assigned to `ref` for the scope&period;
|===

Restore the previous value unless dismissed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;ScopeExitRestore();
----

Prevent restoration on destruction&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
dismiss();
----

Stores source information for a declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct SourceInfo;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SourceInfo-2constructor[`SourceInfo`]         [.small]#[constructor]#
| Construct with no locations&period;
| link:#mrdocs-SourceInfo-2destructor[`&#126;SourceInfo`] [.small]#[destructor]# [.small]#[virtual]#
| Polymorphic base needs a virtual destructor&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SourceInfo-DefLoc[`DefLoc`] 
| Location where the entity was defined
| link:#mrdocs-SourceInfo-Loc[`Loc`] 
| Locations where the entity was declared&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-getPrimaryLocation-0f[`getPrimaryLocation`]
| Choose the best location to display for a symbol&period;
| link:#mrdocs-merge-0c[`merge`]
| Merge, transferring ownership from the right&hyphen;hand side&period;
| link:#mrdocs-merge-0dd1[`merge`]
| Merge the location sets, preferring existing def&sol;primary&period;
|===

Construct with no locations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
SourceInfo() = default;
----

Polymorphic base needs a virtual destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;SourceInfo() = default;
----

Location where the entity was defined

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Location&gt;] DefLoc;
----

== Description

KRYSTIAN NOTE&colon; this is used for entities which cannot be redeclared &hyphen;&hyphen; regardless of whether such a declaration is actually a definition (e&period;g&period; alias&hyphen;declarations and typedef declarations are never definition)&period;

Locations where the entity was declared&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Location&gt; Loc;
----

== Description

This does not include the definition&period;

A source location with filename prettification&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class SourceLocation;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SourceLocation-2constructor[`SourceLocation`]         [.small]#[constructor]#
| Build a location wrapper from a `source&lowbar;location`&period;
| link:#mrdocs-SourceLocation-column[`column`] 
| Column number (1&hyphen;based) within the file&period;
| link:#mrdocs-SourceLocation-file_name[`file&lowbar;name`] 
| File name associated with the location&period;
| link:#mrdocs-SourceLocation-function_name[`function&lowbar;name`] 
| Function name captured at the location&period;
| link:#mrdocs-SourceLocation-line[`line`] 
| Line number (1&hyphen;based) within the file&period;
|===

Build a location wrapper from a `source&lowbar;location`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
SourceLocation(std::source&lowbar;location const& loc) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *loc*
| The object to copy construct from
|===

Column number (1&hyphen;based) within the file&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
uint&lowbar;least32&lowbar;t
column() const noexcept;
----

== Return Value

One&hyphen;based column index&period;

File name associated with the location&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
file&lowbar;name() const noexcept;
----

== Return Value

Path of the source file&period;

Function name captured at the location&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
function&lowbar;name() const noexcept;
----

== Return Value

Name of the function where the location was recorded&period;

Line number (1&hyphen;based) within the file&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
uint&lowbar;least32&lowbar;t
line() const noexcept;
----

== Return Value

One&hyphen;based line index&period;

Represents a (possibly qualified) symbol name with template arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;SpecializationName&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct SpecializationName final
    : link:#mrdocs-Name[Name]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-Name[Name]`
| Represents a name for a named `Type`
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SpecializationName-2constructor[`SpecializationName`]         [.small]#[constructor]#
| Construct an empty specialization name&period;
| link:#mrdocs-Name-asName-08[`asName`] 
| `asName` overloads
| link:#mrdocs-Name-operator_eq[`operator&equals;&equals;`] 
| Equality compares all fields&period;
| link:#mrdocs-SpecializationName-operator_3way-08[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Name-Identifier[`Identifier`] 
| The unqualified name&period;
| link:#mrdocs-Name-Kind[`Kind`] 
| The kind of name this is&period;
| link:#mrdocs-Name-Prefix[`Prefix`] 
| The parent name info, if any&period;
| link:#mrdocs-SpecializationName-TemplateArgs[`TemplateArgs`] 
| The template arguments&period;
| link:#mrdocs-Name-id[`id`] 
| The SymbolID of the named symbol, if it exists&period;
| link:#mrdocs-SpecializationName-specializationID[`specializationID`] 
| The SymbolID of the named symbol, if it exists&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-0c[`toString`]
| Convert the name to a human&hyphen;readable string&period;
|===

Construct an empty specialization name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;SpecializationName&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
SpecializationName() noexcept;
----

Three&hyphen;way comparison operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

Compare specialization names by base name and template arguments&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-SpecializationName-operator_3way-0c[operator&lt;&equals;&gt;](link:#mrdocs-SpecializationName[SpecializationName] const& other) const;
----

[.small]#link:#mrdocs-SpecializationName-operator_3way-0c[_» more&period;&period;&period;_]#

Order names by kind, identifier, id, and prefix&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-Name-operator_3way[operator&lt;&equals;&gt;](link:#mrdocs-Name[Name] const& other) const;
----

[.small]#link:#mrdocs-Name-operator_3way[_» more&period;&period;&period;_]#

Compare specialization names by base name and template arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;SpecializationName&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(link:#mrdocs-SpecializationName[SpecializationName] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

Order names by kind, identifier, id, and prefix&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-Name[Name] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

The template arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;SpecializationName&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Polymorphic&lt;TArg&gt;&gt; TemplateArgs;
----

The SymbolID of the named symbol, if it exists&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;SpecializationName&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] specializationID = &equals; SymbolID&colon;&colon;invalid;
----

A lazy input range of std&colon;&colon;string&lowbar;view lines split on all known line breaks&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct SplitLinesView
    : std::ranges::view&lowbar;interface&lt;SplitLinesView&gt;
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `std::ranges::view&lowbar;interface&lt;SplitLinesView&gt;`
| 
|===

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SplitLinesView-Iterator[`Iterator`] 
| Iterator over lines produced by SplitLinesView&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SplitLinesView-2constructor-09[`SplitLinesView`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-SplitLinesView-back-04a7[`back`] 
| 
| link:#mrdocs-SplitLinesView-begin[`begin`] 
| Return an iterator to the first line&period;
| link:#mrdocs-SplitLinesView-cbegin-07[`cbegin`] 
| 
| link:#mrdocs-SplitLinesView-cend-0a[`cend`] 
| 
| link:#mrdocs-SplitLinesView-data-0f[`data`] 
| 
| link:#mrdocs-SplitLinesView-empty-07c[`empty`] 
| 
| link:#mrdocs-SplitLinesView-end[`end`] 
| Return the end sentinel for the view&period;
| link:#mrdocs-SplitLinesView-front-05[`front`] 
| 
| link:#mrdocs-SplitLinesView-operator_subs-0c[`operator&lsqb;&rsqb;`] 
| Subscript operators
| link:#mrdocs-SplitLinesView-size-0a[`size`] 
| 
| link:#mrdocs-SplitLinesView-2conversion-096[`operator bool`] 
| Conversion operators
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SplitLinesView-sv_[`sv&lowbar;`] 
| Underlying string to split&period;
|===

Iterator over lines produced by SplitLinesView&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Iterator;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SplitLinesView-Iterator-difference_type[`difference&lowbar;type`] 
| Signed distance type for the iterator&period;
| link:#mrdocs-SplitLinesView-Iterator-value_type[`value&lowbar;type`] 
| Line view type exposed by the iterator&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SplitLinesView-Iterator-2constructor-03[`Iterator`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-SplitLinesView-Iterator-findBreak[`findBreak`] 
| Compute the next line break position&period;
| link:#mrdocs-SplitLinesView-Iterator-operator_star[`operator&ast;`] 
| Return the current line segment&period;
| link:#mrdocs-SplitLinesView-Iterator-operator_inc-0a[`operator&plus;&plus;`] 
| Increment operators
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SplitLinesView-Iterator-atEnd[`atEnd`] 
| Flag indicating the end iterator&period;
| link:#mrdocs-SplitLinesView-Iterator-cur[`cur`] 
| Start of the current line&period;
| link:#mrdocs-SplitLinesView-Iterator-nextBreak[`nextBreak`] 
| Index of the next break delimiter or npos&period;
| link:#mrdocs-SplitLinesView-Iterator-sv[`sv`] 
| Reference to the source string&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-operator_eq-0d[mrdocs::operator&equals;&equals;]`
| Equality operator
|===

Signed distance type for the iterator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using difference&lowbar;type = std::ptrdiff&lowbar;t;
----

Line view type exposed by the iterator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = std::string&lowbar;view;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

Construct an end iterator&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-SplitLinesView-Iterator-2constructor-0c[Iterator]() = default;
----

[.small]#link:#mrdocs-SplitLinesView-Iterator-2constructor-0c[_» more&period;&period;&period;_]#

Construct a begin or end iterator&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
link:#mrdocs-SplitLinesView-Iterator-2constructor-0e[Iterator](
    std::string&lowbar;view s,
    bool begin);
----

[.small]#link:#mrdocs-SplitLinesView-Iterator-2constructor-0e[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| Source string&period;
| *begin*
| If true, position at the first line&semi; otherwise create end iterator&period;
|===

Construct an end iterator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Iterator() = default;
----

Construct a begin or end iterator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
Iterator(
    std::string&lowbar;view s,
    bool begin);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| Source string&period;
| *begin*
| If true, position at the first line&semi; otherwise create end iterator&period;
|===

Compute the next line break position&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::size&lowbar;t
findBreak(std::size&lowbar;t from) const noexcept;
----

== Return Value

Offset of the next break or npos&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *from*
| Index to start searching&period;
|===

Return the current line segment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-SplitLinesView-Iterator-value_type[value&lowbar;type]
operator&ast;() const noexcept;
----

== Return Value

View of the current line&period;

Increment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

Advance to the next line&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-SplitLinesView-Iterator[Iterator]&
link:#mrdocs-SplitLinesView-Iterator-operator_inc-0d[operator&plus;&plus;]() noexcept;
----

[.small]#link:#mrdocs-SplitLinesView-Iterator-operator_inc-0d[_» more&period;&period;&period;_]#

Advance to the next line (post&hyphen;increment)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-SplitLinesView-Iterator-operator_inc-01[operator&plus;&plus;](int unused);
----

[.small]#link:#mrdocs-SplitLinesView-Iterator-operator_inc-01[_» more&period;&period;&period;_]#

== Return Value

Reference to this iterator&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *unused*
| Dummy parameter for postfix form&period;
|===

Advance to the next line&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-SplitLinesView-Iterator[Iterator]&
operator&plus;&plus;() noexcept;
----

== Return Value

Reference to this iterator&period;

Advance to the next line (post&hyphen;increment)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
operator&plus;&plus;(int unused);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *unused*
| Dummy parameter for postfix form&period;
|===

Flag indicating the end iterator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool atEnd = false;
----

Start of the current line&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t cur = 0;
----

Index of the next break delimiter or npos&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t nextBreak = 0;
----

Reference to the source string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view sv = &lcub;&rcub;;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

Construct an empty view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-SplitLinesView-2constructor-03[SplitLinesView]() = default;
----

[.small]#link:#mrdocs-SplitLinesView-2constructor-03[_» more&period;&period;&period;_]#

Construct a view over `sv&period;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
link:#mrdocs-SplitLinesView-2constructor-00[SplitLinesView](std::string&lowbar;view sv);
----

[.small]#link:#mrdocs-SplitLinesView-2constructor-00[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| String to split into lines&period;
|===

Construct an empty view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
SplitLinesView() = default;
----

Construct a view over `sv&period;`

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
SplitLinesView(std::string&lowbar;view sv);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| String to split into lines&period;
|===

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
decltype(auto)
link:#mrdocs-SplitLinesView-back-04a1[back]()
requires bidirectional&lowbar;range&lt;&lowbar;Derived&gt; &amp;&amp; common&lowbar;range&lt;&lowbar;Derived&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-back-04a1[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
decltype(auto)
link:#mrdocs-SplitLinesView-back-00[back]() const
requires bidirectional&lowbar;range&lt;const &lowbar;Derived&gt;
	&amp;&amp; common&lowbar;range&lt;const &lowbar;Derived&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-back-00[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
decltype(auto)
back()
requires bidirectional&lowbar;range&lt;&lowbar;Derived&gt; &amp;&amp; common&lowbar;range&lt;&lowbar;Derived&gt;;
----

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
decltype(auto)
back() const
requires bidirectional&lowbar;range&lt;const &lowbar;Derived&gt;
	&amp;&amp; common&lowbar;range&lt;const &lowbar;Derived&gt;;
----

Return an iterator to the first line&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-SplitLinesView-Iterator[Iterator]
begin() const noexcept;
----

== Return Value

Iterator positioned at the first line&period;

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-SplitLinesView-cbegin-0d[cbegin]()
requires input&lowbar;range&lt;&lowbar;Derived&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-cbegin-0d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-SplitLinesView-cbegin-0b[cbegin]() const
requires input&lowbar;range&lt;const &lowbar;Derived&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-cbegin-0b[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
cbegin()
requires input&lowbar;range&lt;&lowbar;Derived&gt;;
----

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
cbegin() const
requires input&lowbar;range&lt;const &lowbar;Derived&gt;;
----

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-SplitLinesView-cend-0b[cend]()
requires input&lowbar;range&lt;&lowbar;Derived&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-cend-0b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-SplitLinesView-cend-08[cend]() const
requires input&lowbar;range&lt;const &lowbar;Derived&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-cend-08[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
cend()
requires input&lowbar;range&lt;&lowbar;Derived&gt;;
----

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
cend() const
requires input&lowbar;range&lt;const &lowbar;Derived&gt;;
----

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-SplitLinesView-data-09[data]() noexcept(noexcept(ranges&colon;&colon;begin(&lowbar;M&lowbar;derived())))
requires contiguous&lowbar;iterator&lt;iterator&lowbar;t&lt;&lowbar;Derived&gt;&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-data-09[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-SplitLinesView-data-03[data]() const noexcept(noexcept(ranges&colon;&colon;begin(&lowbar;M&lowbar;derived())))
requires range&lt;const &lowbar;Derived&gt;
	&amp;&amp; contiguous&lowbar;iterator&lt;iterator&lowbar;t&lt;const &lowbar;Derived&gt;&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-data-03[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
data() noexcept(noexcept(ranges&colon;&colon;begin(&lowbar;M&lowbar;derived())))
requires contiguous&lowbar;iterator&lt;iterator&lowbar;t&lt;&lowbar;Derived&gt;&gt;;
----

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
data() const noexcept(noexcept(ranges&colon;&colon;begin(&lowbar;M&lowbar;derived())))
requires range&lt;const &lowbar;Derived&gt;
	&amp;&amp; contiguous&lowbar;iterator&lt;iterator&lowbar;t&lt;const &lowbar;Derived&gt;&gt;;
----

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-SplitLinesView-empty-071[empty]() noexcept(noexcept(&lowbar;S&lowbar;empty(&lowbar;M&lowbar;derived())))
requires forward&lowbar;range&lt;&lowbar;Derived&gt; &amp;&amp; (!sized&lowbar;range&lt;&lowbar;Derived&gt;);
----

[.small]#link:#mrdocs-SplitLinesView-empty-071[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-SplitLinesView-empty-00[empty]() const noexcept(noexcept(&lowbar;S&lowbar;empty(&lowbar;M&lowbar;derived())))
requires forward&lowbar;range&lt;const &lowbar;Derived&gt; &amp;&amp; (!sized&lowbar;range&lt;const &lowbar;Derived&gt;);
----

[.small]#link:#mrdocs-SplitLinesView-empty-00[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
empty() noexcept(noexcept(&lowbar;S&lowbar;empty(&lowbar;M&lowbar;derived())))
requires forward&lowbar;range&lt;&lowbar;Derived&gt; &amp;&amp; (!sized&lowbar;range&lt;&lowbar;Derived&gt;);
----

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
empty() const noexcept(noexcept(&lowbar;S&lowbar;empty(&lowbar;M&lowbar;derived())))
requires forward&lowbar;range&lt;const &lowbar;Derived&gt; &amp;&amp; (!sized&lowbar;range&lt;const &lowbar;Derived&gt;);
----

Return the end sentinel for the view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::default&lowbar;sentinel&lowbar;t
end() const noexcept;
----

== Return Value

Default sentinel representing the end&period;

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
decltype(auto)
link:#mrdocs-SplitLinesView-front-04[front]()
requires forward&lowbar;range&lt;&lowbar;Derived&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-front-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
decltype(auto)
link:#mrdocs-SplitLinesView-front-08[front]() const
requires forward&lowbar;range&lt;const &lowbar;Derived&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-front-08[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
decltype(auto)
front()
requires forward&lowbar;range&lt;&lowbar;Derived&gt;;
----

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
decltype(auto)
front() const
requires forward&lowbar;range&lt;const &lowbar;Derived&gt;;
----

Subscript operators

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;random&lowbar;access&lowbar;range &lowbar;Range = link:#mrdocs-SplitLinesView[SplitLinesView]&gt;
constexpr
decltype(auto)
link:#mrdocs-SplitLinesView-operator_subs-07[operator&lsqb;&rsqb;](range&lowbar;difference&lowbar;t&lt;&lowbar;Range&gt; &lowbar;&lowbar;n);
----

[.small]#link:#mrdocs-SplitLinesView-operator_subs-07[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;random&lowbar;access&lowbar;range &lowbar;Range = link:#mrdocs-SplitLinesView[SplitLinesView] const&gt;
constexpr
decltype(auto)
link:#mrdocs-SplitLinesView-operator_subs-0d[operator&lsqb;&rsqb;](range&lowbar;difference&lowbar;t&lt;&lowbar;Range&gt; &lowbar;&lowbar;n) const;
----

[.small]#link:#mrdocs-SplitLinesView-operator_subs-0d[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;random&lowbar;access&lowbar;range &lowbar;Range = link:#mrdocs-SplitLinesView[SplitLinesView]&gt;
constexpr
decltype(auto)
operator&lsqb;&rsqb;(range&lowbar;difference&lowbar;t&lt;&lowbar;Range&gt; &lowbar;&lowbar;n);
----

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;random&lowbar;access&lowbar;range &lowbar;Range = link:#mrdocs-SplitLinesView[SplitLinesView] const&gt;
constexpr
decltype(auto)
operator&lsqb;&rsqb;(range&lowbar;difference&lowbar;t&lt;&lowbar;Range&gt; &lowbar;&lowbar;n) const;
----

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-SplitLinesView-size-03[size]() noexcept(noexcept(&lowbar;S&lowbar;size(&lowbar;M&lowbar;derived())))
requires forward&lowbar;range&lt;&lowbar;Derived&gt;
	&amp;&amp; sized&lowbar;sentinel&lowbar;for&lt;sentinel&lowbar;t&lt;&lowbar;Derived&gt;, iterator&lowbar;t&lt;&lowbar;Derived&gt;&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-size-03[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-SplitLinesView-size-09[size]() const noexcept(noexcept(&lowbar;S&lowbar;size(&lowbar;M&lowbar;derived())))
requires forward&lowbar;range&lt;const &lowbar;Derived&gt;
	&amp;&amp; sized&lowbar;sentinel&lowbar;for&lt;sentinel&lowbar;t&lt;const &lowbar;Derived&gt;,
			      iterator&lowbar;t&lt;const &lowbar;Derived&gt;&gt;;
----

[.small]#link:#mrdocs-SplitLinesView-size-09[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
size() noexcept(noexcept(&lowbar;S&lowbar;size(&lowbar;M&lowbar;derived())))
requires forward&lowbar;range&lt;&lowbar;Derived&gt;
	&amp;&amp; sized&lowbar;sentinel&lowbar;for&lt;sentinel&lowbar;t&lt;&lowbar;Derived&gt;, iterator&lowbar;t&lt;&lowbar;Derived&gt;&gt;;
----

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
size() const noexcept(noexcept(&lowbar;S&lowbar;size(&lowbar;M&lowbar;derived())))
requires forward&lowbar;range&lt;const &lowbar;Derived&gt;
	&amp;&amp; sized&lowbar;sentinel&lowbar;for&lt;sentinel&lowbar;t&lt;const &lowbar;Derived&gt;,
			      iterator&lowbar;t&lt;const &lowbar;Derived&gt;&gt;;
----

Conversion operators

== Synopses

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

Conversion to `bool`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
operator bool() noexcept(noexcept(ranges&colon;&colon;empty(&lowbar;M&lowbar;derived())))
requires requires &lcub; ranges&colon;&colon;empty(&lowbar;M&lowbar;derived())&semi; &rcub;;
----

[.small]#link:#mrdocs-SplitLinesView-2conversion-05[_» more&period;&period;&period;_]#

Conversion to `bool`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
operator bool() const noexcept(noexcept(ranges&colon;&colon;empty(&lowbar;M&lowbar;derived())))
requires requires &lcub; ranges&colon;&colon;empty(&lowbar;M&lowbar;derived())&semi; &rcub;;
----

[.small]#link:#mrdocs-SplitLinesView-2conversion-09c[_» more&period;&period;&period;_]#

Conversion to `bool`

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
operator bool() noexcept(noexcept(ranges&colon;&colon;empty(&lowbar;M&lowbar;derived())))
requires requires &lcub; ranges&colon;&colon;empty(&lowbar;M&lowbar;derived())&semi; &rcub;;
----

== Return Value

The object converted to `bool`

Conversion to `bool`

== Synopsis

Declared in `&lt;bits&sol;ranges&lowbar;util&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
operator bool() const noexcept(noexcept(ranges&colon;&colon;empty(&lowbar;M&lowbar;derived())))
requires requires &lcub; ranges&colon;&colon;empty(&lowbar;M&lowbar;derived())&semi; &rcub;;
----

== Return Value

The object converted to `bool`

Underlying string to split&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view sv&lowbar;;
----

Transparent hash functor for string&hyphen;like keys&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct StringHash;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-StringHash-hash_type[`hash&lowbar;type`] 
| Underlying hash implementation&period;
| link:#mrdocs-StringHash-is_transparent[`is&lowbar;transparent`] 
| Marker for heterogeneous lookup&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-StringHash-operator_call-03[`operator()`] 
| Function call operators
|===

Underlying hash implementation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using hash&lowbar;type = std::hash&lt;std::string&lowbar;view&gt;;
----

Marker for heterogeneous lookup&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using is&lowbar;transparent = void;
----

Function call operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

Hash string&lowbar;view input&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
link:#mrdocs-StringHash-operator_call-0b[operator()](std::string&lowbar;view str) const;
----

[.small]#link:#mrdocs-StringHash-operator_call-0b[_» more&period;&period;&period;_]#

Hash std&colon;&colon;string input&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
link:#mrdocs-StringHash-operator_call-02[operator()](std::string const& str) const;
----

[.small]#link:#mrdocs-StringHash-operator_call-02[_» more&period;&period;&period;_]#

Hash C&hyphen;string input&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
link:#mrdocs-StringHash-operator_call-09[operator()](char const* str) const;
----

[.small]#link:#mrdocs-StringHash-operator_call-09[_» more&period;&period;&period;_]#

== Return Value

* Hash value of the string view&period;
* Hash value of the string&period;

Hash string&lowbar;view input&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
operator()(std::string&lowbar;view str) const;
----

== Return Value

Hash value of the string view&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The right operand
|===

Hash std&colon;&colon;string input&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
operator()(std::string const& str) const;
----

== Return Value

Hash value of the string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The right operand
|===

Hash C&hyphen;string input&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;UnorderedStringMap&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::size&lowbar;t
operator()(char const* str) const;
----

== Return Value

Hash value of the string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The right operand
|===

Base class with common properties of all symbols

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Symbol;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Symbol-2destructor[`&#126;Symbol`] [.small]#[destructor]# [.small]#[virtual]#
| Polymorphic base needs a virtual destructor&period;
| link:#mrdocs-Symbol-asInfo-08[`asInfo`] 
| `asInfo` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Symbol-Access[`Access`] 
| Declaration access&period;
| link:#mrdocs-Symbol-Extraction[`Extraction`] 
| Determine why a symbol is extracted&period;
| link:#mrdocs-Symbol-IsCopyFromInherited[`IsCopyFromInherited`] 
| Whether this a copy of an inherited method, as produced when `inherit&hyphen;base&hyphen;members` is not `never`&period;
| link:#mrdocs-Symbol-Kind[`Kind`] 
| Kind of declaration&period;
| link:#mrdocs-Symbol-Loc[`Loc`] 
| The source location information&period;
| link:#mrdocs-Symbol-Name[`Name`] 
| The unqualified name&period;
| link:#mrdocs-Symbol-Parent[`Parent`] 
| The parent symbol, if any&period;
| link:#mrdocs-Symbol-doc[`doc`] 
| The extracted documentation for this declaration&period;
| link:#mrdocs-Symbol-id[`id`] 
| The unique identifier for this symbol&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Symbol-2constructor-03[`Symbol`]         [.small]#[constructor]#
| Constructors
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-SymbolCommonBase-015[`SymbolCommonBase`]
| Base class for providing variant discriminator functions&period;
|===

Polymorphic base needs a virtual destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;Symbol() = default;
----

`asInfo` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

View this instance as a const Symbol reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Symbol[Symbol] const&
link:#mrdocs-Symbol-asInfo-0c[asInfo]() const noexcept;
----

[.small]#link:#mrdocs-Symbol-asInfo-0c[_» more&period;&period;&period;_]#

View this instance as a mutable Symbol reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Symbol[Symbol]&
link:#mrdocs-Symbol-asInfo-00[asInfo]() noexcept;
----

[.small]#link:#mrdocs-Symbol-asInfo-00[_» more&period;&period;&period;_]#

View this instance as a const Symbol reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Symbol[Symbol] const&
asInfo() const noexcept;
----

== Return Value

Base class with common properties of all symbols

View this instance as a mutable Symbol reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Symbol[Symbol]&
asInfo() noexcept;
----

== Return Value

Base class with common properties of all symbols

Declaration access&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-AccessKind[AccessKind] Access = AccessKind&colon;&colon;None;
----

== Description

Class members use&colon;

* `AccessKind&colon;&colon;Public`,
* `AccessKind&colon;&colon;Protected`, and
* `AccessKind&colon;&colon;Private`&period;

Namespace members use `AccessKind&colon;&colon;None`&period;

Determine why a symbol is extracted&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExtractionMode[ExtractionMode] Extraction = ExtractionMode&colon;&colon;Dependency;
----

== Description

This flag distinguishes `Info` from its dependencies and indicates why it was extracted&period;

Non&hyphen;dependencies can be extracted in normal mode, see&hyphen;below mode, or implementation&hyphen;defined mode&period;

A dependency is a symbol that does not meet the configured conditions for extraction, but had to be extracted due to it being used transitively by a primary `Info`&period;

Whether this a copy of an inherited method, as produced when `inherit&hyphen;base&hyphen;members` is not `never`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsCopyFromInherited = false;
----

Kind of declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolKind[SymbolKind] Kind = SymbolKind&colon;&colon;None;
----

The source location information&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SourceInfo[SourceInfo] Loc;
----

The unqualified name&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string Name;
----

The parent symbol, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] Parent;
----

== Description

This is the parent namespace or record where the symbol is defined&period;

The extracted documentation for this declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;DocComment&gt;] doc;
----

The unique identifier for this symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] id;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

Default constructor for derived types&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Symbol-2constructor-0b[Symbol]() = default;
----

[.small]#link:#mrdocs-Symbol-2constructor-0b[_» more&period;&period;&period;_]#

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Symbol-2constructor-0f3[Symbol](link:#mrdocs-Symbol[Symbol] const& Other) = default;
----

[.small]#link:#mrdocs-Symbol-2constructor-0f3[_» more&period;&period;&period;_]#

Move constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Symbol-2constructor-0f7[Symbol](link:#mrdocs-Symbol[Symbol]&& Other) = default;
----

[.small]#link:#mrdocs-Symbol-2constructor-0f7[_» more&period;&period;&period;_]#

Construct a Symbol&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-Symbol-2constructor-0d[Symbol](
    link:#mrdocs-SymbolKind[SymbolKind] const kind,
    link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

[.small]#link:#mrdocs-Symbol-2constructor-0d[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The kind of symbol
| *ID*
| The unique identifier for this symbol
|===

Default constructor for derived types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Symbol() = default;
----

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Symbol(link:#mrdocs-Symbol[Symbol] const& Other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *Other*
| The object to copy construct from
|===

Move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Symbol(link:#mrdocs-Symbol[Symbol]&& Other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *Other*
| The object to move construct from
|===

Construct a Symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
Symbol(
    link:#mrdocs-SymbolKind[SymbolKind] const kind,
    link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The kind of symbol
| *ID*
| The unique identifier for this symbol
|===

Base class for providing variant discriminator functions&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-SymbolKind[SymbolKind] K&gt;
struct SymbolCommonBase
    : link:#mrdocs-Symbol[Symbol]
----

== Description

This offers functions that return a boolean at compile&hyphen;time, indicating if the most&hyphen;derived class is a certain type&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-Symbol[Symbol]`
| Base class with common properties of all symbols
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Symbol-asInfo-08[`asInfo`] 
| `asInfo` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Symbol-Access[`Access`] 
| Declaration access&period;
| link:#mrdocs-Symbol-Extraction[`Extraction`] 
| Determine why a symbol is extracted&period;
| link:#mrdocs-Symbol-IsCopyFromInherited[`IsCopyFromInherited`] 
| Whether this a copy of an inherited method, as produced when `inherit&hyphen;base&hyphen;members` is not `never`&period;
| link:#mrdocs-Symbol-Kind[`Kind`] 
| Kind of declaration&period;
| link:#mrdocs-Symbol-Loc[`Loc`] 
| The source location information&period;
| link:#mrdocs-Symbol-Name[`Name`] 
| The unqualified name&period;
| link:#mrdocs-Symbol-Parent[`Parent`] 
| The parent symbol, if any&period;
| link:#mrdocs-Symbol-doc[`doc`] 
| The extracted documentation for this declaration&period;
| link:#mrdocs-Symbol-id[`id`] 
| The unique identifier for this symbol&period;
|===

== Static Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SymbolCommonBase-015-kind_id[`kind&lowbar;id`] 
| The variant discriminator constant of the most&hyphen;derived class&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SymbolCommonBase-015-2constructor-07[`SymbolCommonBase`]         [.small]#[constructor]#
| Constructors
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `mrdocs::mrdocs&lowbar;member&lowbar;descriptor&lowbar;fn`
| 
| `mrdocs::mrdocs&lowbar;base&lowbar;descriptor&lowbar;fn`
| 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-ConceptSymbol[`ConceptSymbol`]
| Info for concepts&period;
| link:#mrdocs-EnumConstantSymbol[`EnumConstantSymbol`]
| Info for enum constants&period;
| link:#mrdocs-EnumSymbol[`EnumSymbol`]
| Metadata for an enumeration declaration&period;
| link:#mrdocs-FunctionSymbol[`FunctionSymbol`]
| Metadata for a function or method&period;
| link:#mrdocs-GuideSymbol[`GuideSymbol`]
| Info for deduction guides&period;
| link:#mrdocs-NamespaceAliasSymbol[`NamespaceAliasSymbol`]
| Info for namespace aliases&period;
| link:#mrdocs-NamespaceSymbol[`NamespaceSymbol`]
| Describes a namespace and its members&period;
| link:#mrdocs-OverloadsSymbol[`OverloadsSymbol`]
| Represents a set of function overloads&period;
| link:#mrdocs-RecordSymbol[`RecordSymbol`]
| Metadata for struct, class, or union&period;
| link:#mrdocs-TypedefSymbol[`TypedefSymbol`]
| Info for typedef and using declarations&period;
| link:#mrdocs-UsingSymbol[`UsingSymbol`]
| Info for using declarations&period;
| link:#mrdocs-VariableSymbol[`VariableSymbol`]
| A variable&period;
|===

The variant discriminator constant of the most&hyphen;derived class&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id = K;
----

== Description

It only distinguishes from `Symbol&colon;&colon;kind` in that it is a constant&period;

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

Default constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolCommonBase-015-2constructor-05[SymbolCommonBase]() = default;
----

[.small]#link:#mrdocs-SymbolCommonBase-015-2constructor-05[_» more&period;&period;&period;_]#

Construct bound to an ID&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
link:#mrdocs-SymbolCommonBase-015-2constructor-0d[SymbolCommonBase](link:#mrdocs-SymbolID[SymbolID] const& ID);
----

[.small]#link:#mrdocs-SymbolCommonBase-015-2constructor-0d[_» more&period;&period;&period;_]#

Default constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
SymbolCommonBase() = default;
----

Construct bound to an ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
SymbolCommonBase(link:#mrdocs-SymbolID[SymbolID] const& ID);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to copy construct from
|===

A glob pattern matcher for C&plus;&plus; symbols

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class SymbolGlobPattern;
----

== Description

A glob pattern matcher where &quot;&ast;&quot; does not match &quot;&colon;&colon;&quot;&period; The pattern &quot;&ast;&ast;&quot; can be used to match any number of &quot;&colon;&colon;&quot;&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SymbolGlobPattern-2constructor-0f1[`SymbolGlobPattern`]         [.small]#[constructor]#
| Construct an empty SymbolGlobPattern&period;
| link:#mrdocs-SymbolGlobPattern-isLiteral[`isLiteral`] 
| Checks if the glob pattern is a literal string&period;
| link:#mrdocs-SymbolGlobPattern-match[`match`] 
| Matches the given string against the glob pattern&period;
| link:#mrdocs-SymbolGlobPattern-matchPatternPrefix[`matchPatternPrefix`] 
| Matches the start of a given string against the glob pattern&period;
| link:#mrdocs-SymbolGlobPattern-pattern[`pattern`] 
| Returns the glob pattern&period;
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SymbolGlobPattern-create-00[`create`] 
| Constructs a SymbolGlobPattern with the given pattern&period;
|===

Construct an empty SymbolGlobPattern&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

Construct an empty SymbolGlobPattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-SymbolGlobPattern-2constructor-0f7[SymbolGlobPattern]() = default;
----

[.small]#link:#mrdocs-SymbolGlobPattern-2constructor-0f7[_» more&period;&period;&period;_]#

Construct an empty SymbolGlobPattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-SymbolGlobPattern-2constructor-0a[SymbolGlobPattern](link:#mrdocs-GlobPattern[GlobPattern] glob);
----

[.small]#link:#mrdocs-SymbolGlobPattern-2constructor-0a[_» more&period;&period;&period;_]#

Construct an empty SymbolGlobPattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
SymbolGlobPattern() = default;
----

== Description

An empty SymbolGlobPattern will never match any string&period;

Construct an empty SymbolGlobPattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
SymbolGlobPattern(link:#mrdocs-GlobPattern[GlobPattern] glob);
----

== Description

An empty SymbolGlobPattern will never match any string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *glob*
| The object to construct from
|===

Checks if the glob pattern is a literal string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isLiteral() const;
----

== Description

This function determines if the glob pattern does not contain any special characters&period; In other words, it matches a single string&period;

== Return Value

true if the glob pattern is a literal string, false otherwise&period;

Matches the given string against the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
match(std::string&lowbar;view const str) const;
----

== Return Value

true if the string matches the pattern, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to match against the pattern&period;
|===

Matches the start of a given string against the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
matchPatternPrefix(std::string&lowbar;view prefix) const;
----

== Description

This function determines if the given string with the specified `prefix` can potentially match the glob pattern&period;

If the string matches the start of the pattern without failure, even if there are characters left in the string or the pattern, the function returns true&period;

== Return Value

true if the string prefix matches the pattern, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *prefix*
| The string to match against the pattern&period;
|===

Returns the glob pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
pattern() const;
----

== Return Value

The glob pattern as a string view&period;

Constructs a SymbolGlobPattern with the given pattern&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

Constructs a SymbolGlobPattern with the given pattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;SymbolGlobPattern&gt;]
link:#mrdocs-SymbolGlobPattern-create-0d[create](std::string&lowbar;view const pattern);
----

[.small]#link:#mrdocs-SymbolGlobPattern-create-0d[_» more&period;&period;&period;_]#

Constructs a SymbolGlobPattern with the given pattern&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;SymbolGlobPattern&gt;]
link:#mrdocs-SymbolGlobPattern-create-05[create](
    std::string&lowbar;view const pattern,
    link:#mrdocs-Optional-03[Optional&lt;std::size&lowbar;t&gt;] maxSubGlobs);
----

[.small]#link:#mrdocs-SymbolGlobPattern-create-05[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| The glob pattern to use for matching&period;
| *maxSubGlobs*
| The maximum number of subpatterns allowed&period;
|===

Constructs a SymbolGlobPattern with the given pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;SymbolGlobPattern&gt;]
create(std::string&lowbar;view const pattern);
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| The glob pattern to use for matching&period;
|===

Constructs a SymbolGlobPattern with the given pattern&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Glob&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-Expected-0a[Expected&lt;SymbolGlobPattern&gt;]
create(
    std::string&lowbar;view const pattern,
    link:#mrdocs-Optional-03[Optional&lt;std::size&lowbar;t&gt;] maxSubGlobs);
----

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pattern*
| The glob pattern to use for matching&period;
| *maxSubGlobs*
| The maximum number of subpatterns allowed&period;
|===

A unique identifier for a symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class SymbolID;
----

== Description

This is calculated as the SHA1 digest of the USR&period; A USRs is a string that provides an unambiguous reference to a symbol&period;

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SymbolID-value_type[`value&lowbar;type`] 
| Underlying byte storage&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SymbolID-2constructor-0b[`SymbolID`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-SymbolID-begin[`begin`] 
| Return an iterator to the first byte of the SymbolID&period;
| link:#mrdocs-SymbolID-data[`data`] 
| Return the raw data for this SymbolID&period;
| link:#mrdocs-SymbolID-end[`end`] 
| Return an iterator to one past the last byte of the SymbolID&period;
| link:#mrdocs-SymbolID-size[`size`] 
| Return the size of the SymbolID&period;
| link:#mrdocs-SymbolID-2conversion-0e[`operator std::string&lowbar;view`] 
| Return a string view of the SymbolID&period;
| link:#mrdocs-SymbolID-2conversion-0a[`operator bool`] 
| Return true if this is a valid SymbolID&period;
| link:#mrdocs-SymbolID-operator_eq[`operator&equals;&equals;`] 
| Compare two SymbolIDs for equality&period;
| link:#mrdocs-SymbolID-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare two SymbolIDs with strong ordering&period;
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SymbolID-createFromString[`createFromString`] 
| Construct a SymbolID by hashing a string
|===

== Static Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-SymbolID-global[`global`] 
| Sentinel ID representing the global namespace&period;
| link:#mrdocs-SymbolID-invalid[`invalid`] 
| Sentinel ID used to represent “no symbol&period;”
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-getParents-04[`getParents`]
| Return a list of the parent symbols of the specified Symbol&period;
| link:#mrdocs-toBase16Str[`toBase16Str`]
| Convert a SymbolID to a string
|===

Underlying byte storage&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = uint8&lowbar;t;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

Construct a zero&hyphen;initialized identifier&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-SymbolID-2constructor-0c[SymbolID]() = default;
----

[.small]#link:#mrdocs-SymbolID-2constructor-0c[_» more&period;&period;&period;_]#

Construct a SymbolID from a null&hyphen;terminated string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;value&lowbar;type&gt; Char&gt;
constexpr
link:#mrdocs-SymbolID-2constructor-04[SymbolID](Char const* src);
----

[.small]#link:#mrdocs-SymbolID-2constructor-04[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *src*
| The string to construct from&period;
|===

Construct a zero&hyphen;initialized identifier&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
SymbolID() = default;
----

Construct a SymbolID from a null&hyphen;terminated string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;value&lowbar;type&gt; Char&gt;
constexpr
SymbolID(Char const* src);
----

== Description

This function constructs a SymbolID from a string&period; The string must be exactly 20 characters long&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *src*
| The string to construct from&period;
|===

Return an iterator to the first byte of the SymbolID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
begin() const noexcept;
----

== Return Value

an iterator to the first byte of the SymbolID&period;

Return the raw data for this SymbolID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
data() const noexcept;
----

== Return Value

the raw data for this SymbolID&period;

Return an iterator to one past the last byte of the SymbolID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
end() const noexcept;
----

== Return Value

an iterator to one past the last byte of the SymbolID&period;

Return the size of the SymbolID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::size&lowbar;t
size() const noexcept;
----

== Description

The size of a SymbolID is always 20&period;

== Return Value

the size of the SymbolID&period;

Return a string view of the SymbolID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
operator std::string&lowbar;view() const noexcept;
----

== Return Value

a string view of the SymbolID&period;

Return true if this is a valid SymbolID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
operator bool() const noexcept;
----

== Return Value

true if this is a valid SymbolID&period;

Compare two SymbolIDs for equality&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(link:#mrdocs-SymbolID[SymbolID] const& other) const noexcept = default;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

Compare two SymbolIDs with strong ordering&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
operator&lt;&equals;&gt;(link:#mrdocs-SymbolID[SymbolID] const& other) const noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

Construct a SymbolID by hashing a string

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
link:#mrdocs-SymbolID[SymbolID]
createFromString(std::string&lowbar;view input);
----

== Return Value

The SymbolID created by hashing the string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *input*
| The string to hash&period;
|===

Sentinel ID representing the global namespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-SymbolID[SymbolID] global = &quot;&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&quot;
    &quot;&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&bsol;xFF&quot;;
----

== Description

Symbol ID of the global namespace&period;

Sentinel ID used to represent “no symbol&period;”

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-SymbolID[SymbolID] invalid = SymbolID();
----

Base class for any template argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TArg;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TArg-2destructor[`&#126;TArg`] [.small]#[destructor]# [.small]#[virtual]#
| Polymorphic base needs a virtual destructor&period;
| link:#mrdocs-TArg-asTArg-0c[`asTArg`] 
| `asTArg` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TArg-IsPackExpansion[`IsPackExpansion`] 
| Whether this template argument is a parameter expansion&period;
| link:#mrdocs-TArg-Kind[`Kind`] 
| The kind of template argument this is&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TArg-2constructor-0f[`TArg`]         [.small]#[constructor]#
| Constructors
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-087[`toString`]
| Convert a template argument to a human&hyphen;readable string&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-TArgCommonBase-06[`TArgCommonBase`]
| CRTP base that fixes the argument kind&period;
|===

Polymorphic base needs a virtual destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;TArg() = default;
----

`asTArg` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

View this object as a TArg reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TArg[TArg] const&
link:#mrdocs-TArg-asTArg-06[asTArg]() const noexcept;
----

[.small]#link:#mrdocs-TArg-asTArg-06[_» more&period;&period;&period;_]#

View this object as a mutable TArg reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TArg[TArg]&
link:#mrdocs-TArg-asTArg-0a[asTArg]() noexcept;
----

[.small]#link:#mrdocs-TArg-asTArg-0a[_» more&period;&period;&period;_]#

View this object as a TArg reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TArg[TArg] const&
asTArg() const noexcept;
----

== Return Value

Base class for any template argument&period;

View this object as a mutable TArg reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TArg[TArg]&
asTArg() noexcept;
----

== Return Value

Base class for any template argument&period;

Whether this template argument is a parameter expansion&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsPackExpansion = false;
----

The kind of template argument this is&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-TArgKind[TArgKind] Kind = TArgKind&colon;&colon;Type;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

Defaulted base constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TArg-2constructor-0d[TArg]() noexcept = default;
----

[.small]#link:#mrdocs-TArg-2constructor-0d[_» more&period;&period;&period;_]#

Construct with a specific argument kind&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TArg-2constructor-07[TArg](link:#mrdocs-TArgKind[TArgKind] kind) noexcept;
----

[.small]#link:#mrdocs-TArg-2constructor-07[_» more&period;&period;&period;_]#

Defaulted base constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
TArg() noexcept = default;
----

Construct with a specific argument kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
TArg(link:#mrdocs-TArgKind[TArgKind] kind) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The object to construct from
|===

CRTP base that fixes the argument kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-TArgKind[TArgKind] K&gt;
struct TArgCommonBase
    : link:#mrdocs-TArg[TArg]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TArg[TArg]`
| Base class for any template argument&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TArg-asTArg-0c[`asTArg`] 
| `asTArg` overloads
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TArgCommonBase-06-isConstant[`isConstant`] 
| Test whether the kind is a non&hyphen;type constant argument&period;
| link:#mrdocs-TArgCommonBase-06-isTemplate[`isTemplate`] 
| Test whether the kind is a template argument&period;
| link:#mrdocs-TArgCommonBase-06-isType[`isType`] 
| Test whether the kind is a type argument&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TArg-IsPackExpansion[`IsPackExpansion`] 
| Whether this template argument is a parameter expansion&period;
| link:#mrdocs-TArg-Kind[`Kind`] 
| The kind of template argument this is&period;
|===

== Static Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TArgCommonBase-06-kind_id[`kind&lowbar;id`] 
| Static discriminator for the concrete argument&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TArgCommonBase-06-2constructor[`TArgCommonBase`]         [.small]#[constructor]#
| Construct with the fixed kind&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `mrdocs::mrdocs&lowbar;member&lowbar;descriptor&lowbar;fn`
| 
| `mrdocs::mrdocs&lowbar;base&lowbar;descriptor&lowbar;fn`
| 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-087[`toString`]
| Convert a template argument to a human&hyphen;readable string&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-ConstantTArg[`ConstantTArg`]
| Non&hyphen;type template argument&period;
| link:#mrdocs-TemplateTArg[`TemplateTArg`]
| Template template argument&period;
| link:#mrdocs-TypeTArg[`TypeTArg`]
| Type template argument&period;
|===

Test whether the kind is a non&hyphen;type constant argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConstant() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` equals `TypeKind&colon;&colon;Constant`&period;

Test whether the kind is a template argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTemplate() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` equals `TypeKind&colon;&colon;Template`&period;

Test whether the kind is a type argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isType() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` equals `TypeKind&colon;&colon;Type`&period;

Static discriminator for the concrete argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-TArgKind[TArgKind] kind&lowbar;id = K;
----

Construct with the fixed kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
TArgCommonBase() noexcept;
----

Base class for a template parameter declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TParam;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TParam-2destructor[`&#126;TParam`] [.small]#[destructor]# [.small]#[virtual]#
| Polymorphic base needs a virtual destructor&period;
| link:#mrdocs-TParam-asTParam-0f[`asTParam`] 
| `asTParam` overloads
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TParam-Default[`Default`] 
| The default template argument, if any
| link:#mrdocs-TParam-IsParameterPack[`IsParameterPack`] 
| Whether this template parameter is a parameter pack
| link:#mrdocs-TParam-Kind[`Kind`] 
| The kind of template parameter this is
| link:#mrdocs-TParam-Name[`Name`] 
| The template parameters name, if any
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TParam-2constructor-00[`TParam`]         [.small]#[constructor]#
| Constructors
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-TParamCommonBase-0c[`TParamCommonBase`]
| CRTP base that fixes the parameter kind&period;
|===

Polymorphic base needs a virtual destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;TParam() = default;
----

`asTParam` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

View this object as a TParam reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TParam[TParam] const&
link:#mrdocs-TParam-asTParam-0b[asTParam]() const noexcept;
----

[.small]#link:#mrdocs-TParam-asTParam-0b[_» more&period;&period;&period;_]#

View this object as a mutable TParam reference&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TParam[TParam]&
link:#mrdocs-TParam-asTParam-06[asTParam]() noexcept;
----

[.small]#link:#mrdocs-TParam-asTParam-06[_» more&period;&period;&period;_]#

View this object as a TParam reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TParam[TParam] const&
asTParam() const noexcept;
----

== Return Value

Base class for a template parameter declaration&period;

View this object as a mutable TParam reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TParam[TParam]&
asTParam() noexcept;
----

== Return Value

Base class for a template parameter declaration&period;

The default template argument, if any

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;TArg&gt;&gt;] Default = std&colon;&colon;nullopt;
----

Whether this template parameter is a parameter pack

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsParameterPack = false;
----

The kind of template parameter this is

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-TParamKind[TParamKind] Kind = TParamKind&colon;&colon;Type;
----

The template parameters name, if any

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string Name;
----

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

Defaulted base constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TParam-2constructor-09[TParam]() noexcept = default;
----

[.small]#link:#mrdocs-TParam-2constructor-09[_» more&period;&period;&period;_]#

Construct with a fixed parameter kind&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-TParam-2constructor-05[TParam](link:#mrdocs-TParamKind[TParamKind] kind) noexcept;
----

[.small]#link:#mrdocs-TParam-2constructor-05[_» more&period;&period;&period;_]#

Defaulted base constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
TParam() noexcept = default;
----

Construct with a fixed parameter kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
TParam(link:#mrdocs-TParamKind[TParamKind] kind) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The object to construct from
|===

CRTP base that fixes the parameter kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-TParamKind[TParamKind] K&gt;
struct TParamCommonBase
    : link:#mrdocs-TParam[TParam]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TParam[TParam]`
| Base class for a template parameter declaration&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TParam-asTParam-0f[`asTParam`] 
| `asTParam` overloads
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TParamCommonBase-0c-isConstant[`isConstant`] 
| True if the parameter is a non&hyphen;type parameter&period;
| link:#mrdocs-TParamCommonBase-0c-isTemplate[`isTemplate`] 
| True if the parameter is a template template parameter&period;
| link:#mrdocs-TParamCommonBase-0c-isType[`isType`] 
| True if the parameter is a type parameter&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TParam-Default[`Default`] 
| The default template argument, if any
| link:#mrdocs-TParam-IsParameterPack[`IsParameterPack`] 
| Whether this template parameter is a parameter pack
| link:#mrdocs-TParam-Kind[`Kind`] 
| The kind of template parameter this is
| link:#mrdocs-TParam-Name[`Name`] 
| The template parameters name, if any
|===

== Static Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TParamCommonBase-0c-kind_id[`kind&lowbar;id`] 
| Static discriminator for the concrete parameter&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TParamCommonBase-0c-2constructor[`TParamCommonBase`]         [.small]#[constructor]#
| Construct with the fixed kind&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `mrdocs::mrdocs&lowbar;member&lowbar;descriptor&lowbar;fn`
| 
| `mrdocs::mrdocs&lowbar;base&lowbar;descriptor&lowbar;fn`
| 
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-ConstantTParam[`ConstantTParam`]
| A constant template parameter
| link:#mrdocs-TemplateTParam[`TemplateTParam`]
| Template template parameter&period;
| link:#mrdocs-TypeTParam[`TypeTParam`]
| Type template parameter&period;
|===

True if the parameter is a non&hyphen;type parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConstant() noexcept;
----

== Return Value

`true` when `kind&lowbar;id` equals `TParamKind&colon;&colon;Constant`&period;

True if the parameter is a template template parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTemplate() noexcept;
----

== Return Value

`true` when `kind&lowbar;id` equals `TParamKind&colon;&colon;Template`&period;

True if the parameter is a type parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isType() noexcept;
----

== Return Value

`true` when `kind&lowbar;id` equals `TParamKind&colon;&colon;Type`&period;

Static discriminator for the concrete parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-TParamKind[TParamKind] kind&lowbar;id = K;
----

Construct with the fixed kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
TParamCommonBase() noexcept;
----

A subset of possible work in a thread pool&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class TaskGroup;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TaskGroup-2constructor[`TaskGroup`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-TaskGroup-2destructor[`&#126;TaskGroup`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-TaskGroup-async[`async`] 
| Submit work to be executed&period;
| link:#mrdocs-TaskGroup-wait[`wait`] 
| Block until all work has completed&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
TaskGroup(link:#mrdocs-ThreadPool[ThreadPool]& threadPool);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *threadPool*
| The object to copy construct from
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;TaskGroup();
----

Submit work to be executed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
void
async(F&& f);
----

== Description

The signature of the submitted function object should be `void(void)`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The function object to execute&period;
|===

Block until all work has completed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::vector&lt;Error&gt;
wait();
----

== Return Value

Zero or more errors which were thrown from submitted work&period;

Information about templates and specializations thereof&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TemplateInfo final
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TemplateInfo-specializationKind[`specializationKind`] 
| Deduce which specialization category this info represents&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TemplateInfo-Args[`Args`] 
| Bound arguments for specializations&period;
| link:#mrdocs-TemplateInfo-Params[`Params`] 
| Template parameter list&period;
| link:#mrdocs-TemplateInfo-Primary[`Primary`] 
| Primary template ID for partial and explicit specializations&period;
| link:#mrdocs-TemplateInfo-Requires[`Requires`] 
| The requires&hyphen;clause for the template parameter list, if any&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-merge-08[`merge`]
| Merge partial template info, filling missing pieces&period;
|===

Deduce which specialization category this info represents&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-TemplateSpecKind[TemplateSpecKind]
specializationKind() const noexcept;
----

== Return Value

The kind of template or specialization&period;

Bound arguments for specializations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Polymorphic&lt;TArg&gt;&gt; Args;
----

Template parameter list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Polymorphic&lt;TParam&gt;&gt; Params;
----

Primary template ID for partial and explicit specializations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] Primary = &equals; SymbolID&colon;&colon;invalid;
----

The requires&hyphen;clause for the template parameter list, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo] Requires;
----

Template template argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TemplateTArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TemplateTArg final
    : link:#mrdocs-TArgCommonBase-06[TArgCommonBase&lt;TArgKind&colon;&colon;Template&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TArgCommonBase-06[TArgCommonBase&lt;TArgKind&colon;&colon;Template&gt;]`
| CRTP base that fixes the argument kind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-TemplateTArg-isConstant[`isConstant`] 
| link:#mrdocs-TemplateTArg-isTemplate[`isTemplate`] 
| link:#mrdocs-TemplateTArg-isType[`isType`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TemplateTArg-Name[`Name`] 
| Name of the referenced template&period;
| link:#mrdocs-TemplateTArg-Template[`Template`] 
| SymbolID of the referenced template&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-TemplateTArg-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-087[`toString`]
| Convert a template argument to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTemplate() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isType() noexcept;
----

Name of the referenced template&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TemplateTArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string Name;
----

SymbolID of the referenced template&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TemplateTArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID] Template;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TArgKind[TArgKind] kind&lowbar;id;
----

Template template parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TemplateTParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TemplateTParam final
    : link:#mrdocs-TParamCommonBase-0c[TParamCommonBase&lt;TParamKind&colon;&colon;Template&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TParamCommonBase-0c[TParamCommonBase&lt;TParamKind&colon;&colon;Template&gt;]`
| CRTP base that fixes the parameter kind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-TemplateTParam-isConstant[`isConstant`] 
| link:#mrdocs-TemplateTParam-isTemplate[`isTemplate`] 
| link:#mrdocs-TemplateTParam-isType[`isType`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TemplateTParam-Params[`Params`] 
| Template parameters for the template&hyphen;template parameter
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-TemplateTParam-kind_id[`kind&lowbar;id`] 
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTemplate() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isType() noexcept;
----

Template parameters for the template&hyphen;template parameter

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TemplateTParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;Polymorphic&lt;TParam&gt;&gt; Params;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TParamKind[TParamKind] kind&lowbar;id;
----

A pool of threads for executing work concurrently&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class ThreadPool;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ThreadPool-arg_ty-0a[`arg&lowbar;ty`] 
| Helper that preserves lvalue&hyphen;ref and constness for references&period;
| link:#mrdocs-ThreadPool-arg_ty-03[`arg&lowbar;ty&lt;T&&gt;`] 
| Alias returning the preserved argument type&period;
| link:#mrdocs-ThreadPool-arg_t[`arg&lowbar;t`] 
| Helper that forwards argument qualifiers&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ThreadPool-2constructor-04[`ThreadPool`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-ThreadPool-2destructor[`&#126;ThreadPool`] [.small]#[destructor]#
| Destructor&period;
| link:#mrdocs-ThreadPool-async[`async`] 
| Submit work to be executed&period;
| link:#mrdocs-ThreadPool-forEach[`forEach`] 
| Invoke a function object for each element of a range&period;
| link:#mrdocs-ThreadPool-getThreadCount[`getThreadCount`] 
| Return the number of threads in the pool&period;
| link:#mrdocs-ThreadPool-wait[`wait`] 
| Block until all work has completed&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TaskGroup[mrdocs::TaskGroup]`
| A subset of possible work in a thread pool&period;
|===

Helper that forwards argument qualifiers&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
using arg&lowbar;t = arg&lowbar;ty&lt;T&gt;::type;
----

Helper that preserves lvalue&hyphen;ref and constness for references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
struct arg&lowbar;ty;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ThreadPool-arg_ty-0a-type[`type`] 
| Resulting adjusted type&period;
|===

Resulting adjusted type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using type = T;
----

Alias returning the preserved argument type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
struct link:#mrdocs-ThreadPool-arg_ty-0a[arg&lowbar;ty]&lt;T&&gt;;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-ThreadPool-arg_ty-03-type[`type`] 
| Resulting adjusted type&period;
|===

== Return Value

Argument type with reference&sol;const qualifiers preserved&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Original argument type&period;
|===

Resulting adjusted type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using type = std::conditional&lowbar;t&lt;std&colon;&colon;is&lowbar;const&lowbar;v&lt;T&gt;, T, T&&gt;;
----

Constructor&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-ThreadPool-2constructor-0e[ThreadPool]();
----

[.small]#link:#mrdocs-ThreadPool-2constructor-0e[_» more&period;&period;&period;_]#

Constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mrdocs-ThreadPool-2constructor-03[ThreadPool](unsigned int concurrency);
----

[.small]#link:#mrdocs-ThreadPool-2constructor-03[_» more&period;&period;&period;_]#

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
ThreadPool();
----

== Description

Default constructed thread pools have concurrency equal to one and never spawn new threads&period; Submitted work blocks the caller until the work is complete&period;

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
ThreadPool(unsigned int concurrency);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *concurrency*
| The value to construct from
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;ThreadPool();
----

Submit work to be executed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
void
async(F&& f);
----

== Description

The signature of the submitted function object should be `void(void)`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The function object to execute&period;
|===

Invoke a function object for each element of a range&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class Range,
    class F&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::vector&lt;Error&gt;
forEach(
    Range&& range,
    F const& f);
----

== Return Value

Zero or more errors which were thrown from submitted work&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range of elements to process&period;
| *f*
| The function object to invoke&period;
|===

Return the number of threads in the pool&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
unsigned int
getThreadCount() const noexcept;
----

== Return Value

the number of threads in the pool&period;

Block until all work has completed&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ThreadPool&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
wait();
----

A possibly qualified type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct Type;
----

== Description

This class represents a type that may have qualifiers (e&period;g&period; const, volatile)&period;

This base class is used to store the kind of type&period; Derived classes are used to store the type information according to the kind&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Type-asType-09[`asType`] 
| `asType` overloads
| link:#mrdocs-Type-namedSymbol[`namedSymbol`] 
| Return the symbol named by this type&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Type-Constraints[`Constraints`] 
| The constraints associated with the type
| link:#mrdocs-Type-IsConst[`IsConst`] 
| The const qualifier
| link:#mrdocs-Type-IsPackExpansion[`IsPackExpansion`] 
| Whether this is the pattern of a pack expansion&period;
| link:#mrdocs-Type-IsVolatile[`IsVolatile`] 
| The volatile qualifier
| link:#mrdocs-Type-Kind[`Kind`] 
| The kind of Type this is
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Type-2constructor[`Type`]         [.small]#[constructor]#
| Construct with a concrete type kind&period;
| link:#mrdocs-Type-2destructor[`&#126;Type`] [.small]#[destructor]# [.small]#[virtual]#
| Virtual destructor for polymorphic base&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-TypeCommonBase-0e[`TypeCommonBase`]
| CRTP base that ties a concrete type to a fixed TypeKind&period;
|===

`asType` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

View as const Type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Type[Type] const&
link:#mrdocs-Type-asType-0d[asType]() const noexcept;
----

[.small]#link:#mrdocs-Type-asType-0d[_» more&period;&period;&period;_]#

View as mutable Type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Type[Type]&
link:#mrdocs-Type-asType-0c[asType]() noexcept;
----

[.small]#link:#mrdocs-Type-asType-0c[_» more&period;&period;&period;_]#

View as const Type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Type[Type] const&
asType() const noexcept;
----

== Return Value

A possibly qualified type&period;

View as mutable Type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Type[Type]&
asType() noexcept;
----

== Return Value

A possibly qualified type&period;

Return the symbol named by this type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-SymbolID[SymbolID]
namedSymbol() const noexcept;
----

== Return Value

the symbol named by this type&period;

The constraints associated with the type

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;ExprInfo&gt; Constraints;
----

== Description

This represents the constraints associated with the type, such as SFINAE constraints&period;

For instance, if SFINAE detection is enabled, the expression `std&colon;&colon;enable&lowbar;if&lowbar;t&lt;std&colon;&colon;is&lowbar;integral&lowbar;v&lt;T&gt;, T&gt;` will have type `T` (NamedType) and constraints `&lcub;std&colon;&colon;is&lowbar;integral&lowbar;v&lt;T&gt;&rcub;`&period;

The const qualifier

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsConst = false;
----

Whether this is the pattern of a pack expansion&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsPackExpansion = false;
----

The volatile qualifier

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsVolatile = false;
----

The kind of Type this is

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-TypeKind[TypeKind] Kind;
----

Construct with a concrete type kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Type(link:#mrdocs-TypeKind[TypeKind] kind) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The object to construct from
|===

Virtual destructor for polymorphic base&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
virtual
&#126;Type() = default;
----

CRTP base that ties a concrete type to a fixed TypeKind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-TypeKind[TypeKind] K&gt;
struct TypeCommonBase
    : link:#mrdocs-Type[Type]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-Type[Type]`
| A possibly qualified type&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Type-asType-09[`asType`] 
| `asType` overloads
| link:#mrdocs-Type-namedSymbol[`namedSymbol`] 
| Return the symbol named by this type&period;
|===

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TypeCommonBase-0e-isArray[`isArray`] 
| True when this is an array type&period;
| link:#mrdocs-TypeCommonBase-0e-isAuto[`isAuto`] 
| True when this concrete kind is auto&period;
| link:#mrdocs-TypeCommonBase-0e-isDecltype[`isDecltype`] 
| True when this concrete kind is decltype&period;
| link:#mrdocs-TypeCommonBase-0e-isFunction[`isFunction`] 
| True when this is a function type&period;
| link:#mrdocs-TypeCommonBase-0e-isLValueReference[`isLValueReference`] 
| True when this is an lvalue reference&period;
| link:#mrdocs-TypeCommonBase-0e-isMemberPointer[`isMemberPointer`] 
| True when this is a member pointer&period;
| link:#mrdocs-TypeCommonBase-0e-isNamed[`isNamed`] 
| True when this concrete kind is a named type&period;
| link:#mrdocs-TypeCommonBase-0e-isPointer[`isPointer`] 
| True when this is a pointer type&period;
| link:#mrdocs-TypeCommonBase-0e-isRValueReference[`isRValueReference`] 
| True when this is an rvalue reference&period;
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Type-Constraints[`Constraints`] 
| The constraints associated with the type
| link:#mrdocs-Type-IsConst[`IsConst`] 
| The const qualifier
| link:#mrdocs-Type-IsPackExpansion[`IsPackExpansion`] 
| Whether this is the pattern of a pack expansion&period;
| link:#mrdocs-Type-IsVolatile[`IsVolatile`] 
| The volatile qualifier
| link:#mrdocs-Type-Kind[`Kind`] 
| The kind of Type this is
|===

== Static Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TypeCommonBase-0e-kind_id[`kind&lowbar;id`] 
| Static discriminator for the concrete type&period;
|===

== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TypeCommonBase-0e-2constructor[`TypeCommonBase`]         [.small]#[constructor]#
| Construct the base with the fixed kind&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `mrdocs::mrdocs&lowbar;member&lowbar;descriptor&lowbar;fn`
| 
| `mrdocs::mrdocs&lowbar;base&lowbar;descriptor&lowbar;fn`
| 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-innerType-06[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerType-09[`innerType`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-08[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-innerTypePtr-0a[`innerTypePtr`]
| Return the inner type&period;
| link:#mrdocs-toString-09f[`toString`]
| Render a type to a human&hyphen;readable string&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-ArrayType[`ArrayType`]
| C&plus;&plus; array type (bounded or unbounded)&period;
| link:#mrdocs-AutoType[`AutoType`]
| Represents `auto` or `decltype(auto)` placeholder type&period;
| link:#mrdocs-DecltypeType[`DecltypeType`]
| `decltype(expr)` type wrapper&period;
| link:#mrdocs-FunctionType[`FunctionType`]
| Function type with parameters, qualifiers, and noexcept info&period;
| link:#mrdocs-LValueReferenceType[`LValueReferenceType`]
| An lvalue reference type&period;
| link:#mrdocs-MemberPointerType[`MemberPointerType`]
| Pointer&hyphen;to&hyphen;member type (object or function)&period;
| link:#mrdocs-NamedType[`NamedType`]
| A type identified by name (possibly fundamental)&period;
| link:#mrdocs-PointerType[`PointerType`]
| Pointer type wrapper&period;
| link:#mrdocs-RValueReferenceType[`RValueReferenceType`]
| An rvalue reference type&period;
|===

True when this is an array type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isArray() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;Array`&period;

True when this concrete kind is auto&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isAuto() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;Auto`&period;

True when this concrete kind is decltype&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isDecltype() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;Decltype`&period;

True when this is a function type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;Function`&period;

True when this is an lvalue reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isLValueReference() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;LValueReference`&period;

True when this is a member pointer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isMemberPointer() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;MemberPointer`&period;

True when this concrete kind is a named type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamed() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;Named`&period;

True when this is a pointer type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isPointer() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;Pointer`&period;

True when this is an rvalue reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRValueReference() noexcept;
----

== Return Value

`true` if `kind&lowbar;id` is `TypeKind&colon;&colon;RValueReference`&period;

Static discriminator for the concrete type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mrdocs-TypeKind[TypeKind] kind&lowbar;id = K;
----

Construct the base with the fixed kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
TypeCommonBase() noexcept;
----

Type template argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TypeTArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TypeTArg final
    : link:#mrdocs-TArgCommonBase-06[TArgCommonBase&lt;TArgKind&colon;&colon;Type&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TArgCommonBase-06[TArgCommonBase&lt;TArgKind&colon;&colon;Type&gt;]`
| CRTP base that fixes the argument kind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-TypeTArg-isConstant[`isConstant`] 
| link:#mrdocs-TypeTArg-isTemplate[`isTemplate`] 
| link:#mrdocs-TypeTArg-isType[`isType`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TypeTArg-Type[`Type`] 
| Template argument type&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-TypeTArg-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-087[`toString`]
| Convert a template argument to a human&hyphen;readable string&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTemplate() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isType() noexcept;
----

Template argument type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TypeTArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] Type = Polymorphic&lt;struct Type&gt;(AutoType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TArgKind[TArgKind] kind&lowbar;id;
----

Type template parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TypeTParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TypeTParam final
    : link:#mrdocs-TParamCommonBase-0c[TParamCommonBase&lt;TParamKind&colon;&colon;Type&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-TParamCommonBase-0c[TParamCommonBase&lt;TParamKind&colon;&colon;Type&gt;]`
| CRTP base that fixes the parameter kind&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-TypeTParam-isConstant[`isConstant`] 
| link:#mrdocs-TypeTParam-isTemplate[`isTemplate`] 
| link:#mrdocs-TypeTParam-isType[`isType`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TypeTParam-Constraint[`Constraint`] 
| The type&hyphen;constraint for the parameter, if any&period;
| link:#mrdocs-TypeTParam-KeyKind[`KeyKind`] 
| Keyword (class&sol;typename) the parameter uses
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-TypeTParam-kind_id[`kind&lowbar;id`] 
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTemplate() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isType() noexcept;
----

The type&hyphen;constraint for the parameter, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TypeTParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Name&gt;&gt;] Constraint = std&colon;&colon;nullopt;
----

Keyword (class&sol;typename) the parameter uses

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TypeTParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-TParamKeyKind[TParamKeyKind] KeyKind = TParamKeyKind&colon;&colon;Class;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-TParamKind[TParamKind] kind&lowbar;id;
----

Info for typedef and using declarations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Typedef&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct TypedefSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Typedef&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Typedef&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TypedefSymbol-2constructor[`TypedefSymbol`]         [.small]#[constructor]#
| Create a typedef symbol bound to an ID&period;
| link:#mrdocs-TypedefSymbol-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare typedef symbols, including alias target and template&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-TypedefSymbol-isConcept[`isConcept`] 
| link:#mrdocs-TypedefSymbol-isEnum[`isEnum`] 
| link:#mrdocs-TypedefSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-TypedefSymbol-isFunction[`isFunction`] 
| link:#mrdocs-TypedefSymbol-isGuide[`isGuide`] 
| link:#mrdocs-TypedefSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-TypedefSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-TypedefSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-TypedefSymbol-isRecord[`isRecord`] 
| link:#mrdocs-TypedefSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-TypedefSymbol-isUsing[`isUsing`] 
| link:#mrdocs-TypedefSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-TypedefSymbol-IsUsing[`IsUsing`] 
| Indicates if this is a new C&plus;&plus; &quot;using&quot;&hyphen;style typedef
| link:#mrdocs-TypedefSymbol-Template[`Template`] 
| Template information when the alias is templated&period;
| link:#mrdocs-TypedefSymbol-Type[`Type`] 
| The aliased type&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-TypedefSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Create a typedef symbol bound to an ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Typedef&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
TypedefSymbol(link:#mrdocs-SymbolID[SymbolID] ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to construct from
|===

Compare typedef symbols, including alias target and template&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Typedef&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-TypedefSymbol[TypedefSymbol] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

Indicates if this is a new C&plus;&plus; &quot;using&quot;&hyphen;style typedef

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Typedef&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsUsing = false;
----

== Description

[,cpp]
----
using MyVector = std::vector<int>
----
False means it&apos;s a C&hyphen;style typedef&colon;

[,cpp]
----
typedef std::vector<int> MyVector;
----
Template information when the alias is templated&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Typedef&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;TemplateInfo&gt;] Template;
----

The aliased type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Typedef&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] Type = Polymorphic&lt;struct Type&gt;(NamedType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

Holds an unexpected error value for Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class E&gt;
class Unexpected;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Unexpected-0c-2constructor-0b[`Unexpected`]         [.small]#[constructor]#
| Constructors
| link:#mrdocs-Unexpected-0c-operator_assign-09[`operator&equals;`] 
| Assignment operators
| link:#mrdocs-Unexpected-0c-error-02[`error`] 
| `error` overloads
| link:#mrdocs-Unexpected-0c-swap[`swap`] 
| Swap the contained error with another instance&period;
|===

== Friends

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-swap-02[mrdocs::swap]`
| 
| `link:#mrdocs-operator_eq-0a[mrdocs::operator&equals;&equals;]`
| Equality operator
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Copy constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Unexpected-0c-2constructor-04[Unexpected](link:#mrdocs-Unexpected-0c[Unexpected] const& other) = default;
----

[.small]#link:#mrdocs-Unexpected-0c-2constructor-04[_» more&period;&period;&period;_]#

Move constructor&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Unexpected-0c-2constructor-07[Unexpected](link:#mrdocs-Unexpected-0c[Unexpected]&& other) = default;
----

[.small]#link:#mrdocs-Unexpected-0c-2constructor-07[_» more&period;&period;&period;_]#

Construct from an error value convertible to `E`&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Er = E&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Er&gt;, Unexpected&gt;) &amp;&amp;
      (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Er&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt;) &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Er&gt;
constexpr
explicit
link:#mrdocs-Unexpected-0c-2constructor-012b[Unexpected](Er&& e) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Er&gt;);
----

[.small]#link:#mrdocs-Unexpected-0c-2constructor-012b[_» more&period;&period;&period;_]#

In&hyphen;place construct the error value with arguments&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Unexpected-0c-2constructor-0129[Unexpected](
    std::in&lowbar;place&lowbar;t in&lowbar;place,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Unexpected-0c-2constructor-0129[_» more&period;&period;&period;_]#

In&hyphen;place construct the error value from an initializer list&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
link:#mrdocs-Unexpected-0c-2constructor-0c[Unexpected](
    std::in&lowbar;place&lowbar;t in&lowbar;place,
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

[.small]#link:#mrdocs-Unexpected-0c-2constructor-0c[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Error value to store&period;
| *in&lowbar;place*
| Tag selecting in&hyphen;place construction&period;
| *args*
| Arguments forwarded to `E`&apos;s constructor&period;
| *il*
| Initializer list for the error&period;
|===

Copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Unexpected(link:#mrdocs-Unexpected-0c[Unexpected] const& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy construct from
|===

Move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
Unexpected(link:#mrdocs-Unexpected-0c[Unexpected]&& other) = default;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move construct from
|===

Construct from an error value convertible to `E`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Er = E&gt;
requires (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Er&gt;, Unexpected&gt;) &amp;&amp;
      (!std&colon;&colon;is&lowbar;same&lowbar;v&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Er&gt;, std&colon;&colon;in&lowbar;place&lowbar;t&gt;) &amp;&amp;
        std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Er&gt;
constexpr
explicit
Unexpected(Er&& e) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Er&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| Error value to store&period;
|===

In&hyphen;place construct the error value with arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;
constexpr
explicit
Unexpected(
    std::in&lowbar;place&lowbar;t in&lowbar;place,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *in&lowbar;place*
| Tag selecting in&hyphen;place construction&period;
| *args*
| Arguments forwarded to `E`&apos;s constructor&period;
|===

In&hyphen;place construct the error value from an initializer list&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class&period;&period;&period; Args&gt;
requires std&colon;&colon;is&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt;&amp;, Args&period;&period;&period;&gt;
constexpr
explicit
Unexpected(
    std::in&lowbar;place&lowbar;t in&lowbar;place,
    std::initializer&lowbar;list&lt;U&gt; il,
    Args&&&period;&period;&period; args) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;E, std&colon;&colon;initializer&lowbar;list&lt;U&gt; &amp;, Args&period;&period;&period;&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *in&lowbar;place*
| Tag selecting in&hyphen;place construction&period;
| *il*
| Initializer list for the error&period;
| *args*
| Additional constructor arguments&period;
|===

Assignment operators

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Copy assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Unexpected-0c[Unexpected]&
link:#mrdocs-Unexpected-0c-operator_assign-08[operator&equals;](link:#mrdocs-Unexpected-0c[Unexpected] const& other) = default;
----

[.small]#link:#mrdocs-Unexpected-0c-operator_assign-08[_» more&period;&period;&period;_]#

Move assignment&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Unexpected-0c[Unexpected]&
link:#mrdocs-Unexpected-0c-operator_assign-0d[operator&equals;](link:#mrdocs-Unexpected-0c[Unexpected]&& other) = default;
----

[.small]#link:#mrdocs-Unexpected-0c-operator_assign-0d[_» more&period;&period;&period;_]#

Copy assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Unexpected-0c[Unexpected]&
operator&equals;(link:#mrdocs-Unexpected-0c[Unexpected] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to copy assign from
|===

Move assignment&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-Unexpected-0c[Unexpected]&
operator&equals;(link:#mrdocs-Unexpected-0c[Unexpected]&& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The object to move assign from
|===

`error` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

Return a const reference to the stored error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E const&
link:#mrdocs-Unexpected-0c-error-07f[error]() const &amp; noexcept;
----

[.small]#link:#mrdocs-Unexpected-0c-error-07f[_» more&period;&period;&period;_]#

Return a reference to the stored error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E&
link:#mrdocs-Unexpected-0c-error-0a[error]() &amp; noexcept;
----

[.small]#link:#mrdocs-Unexpected-0c-error-0a[_» more&period;&period;&period;_]#

Return a const rvalue reference to the stored error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E const&&
link:#mrdocs-Unexpected-0c-error-07e[error]() const &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Unexpected-0c-error-07e[_» more&period;&period;&period;_]#

Return a rvalue reference to the stored error&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E&&
link:#mrdocs-Unexpected-0c-error-0e[error]() &amp;&amp; noexcept;
----

[.small]#link:#mrdocs-Unexpected-0c-error-0e[_» more&period;&period;&period;_]#

== Return Value

* Const reference to `E`&period;
* Reference to `E`&period;
* Const rvalue reference to `E`&period;
* Rvalue reference to `E`&period;

Return a const reference to the stored error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E const&
error() const &amp; noexcept;
----

== Return Value

Const reference to `E`&period;

Return a reference to the stored error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E&
error() &amp; noexcept;
----

== Return Value

Reference to `E`&period;

Return a const rvalue reference to the stored error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E const&&
error() const &amp;&amp; noexcept;
----

== Return Value

Const rvalue reference to `E`&period;

Return a rvalue reference to the stored error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
E&&
error() &amp;&amp; noexcept;
----

== Return Value

Rvalue reference to `E`&period;

Swap the contained error with another instance&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(link:#mrdocs-Unexpected-0c[Unexpected]& other) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;swappable&lowbar;v&lt;E&gt;)
requires std&colon;&colon;is&lowbar;swappable&lowbar;v&lt;E&gt;;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| Holds an unexpected error value for Expected&period;
|===

Info for using declarations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Using&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct UsingSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Using&gt;]
----

== Description

For instance, the following code&colon;

[,cpp]
----
using A::f; // where f is a function in namespace A
----
would be represented by a `UsingSymbol` object&period;

Using&hyphen;declarations can be used to introduce namespace members into other namespaces and block scopes, or to introduce base class members into derived class definitions, or to introduce enumerators into namespaces, block, and class scopes&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Using&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-UsingSymbol-2constructor[`UsingSymbol`]         [.small]#[constructor]#
| Create a using&hyphen;declaration symbol bound to an ID&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-UsingSymbol-isConcept[`isConcept`] 
| link:#mrdocs-UsingSymbol-isEnum[`isEnum`] 
| link:#mrdocs-UsingSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-UsingSymbol-isFunction[`isFunction`] 
| link:#mrdocs-UsingSymbol-isGuide[`isGuide`] 
| link:#mrdocs-UsingSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-UsingSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-UsingSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-UsingSymbol-isRecord[`isRecord`] 
| link:#mrdocs-UsingSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-UsingSymbol-isUsing[`isUsing`] 
| link:#mrdocs-UsingSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-UsingSymbol-Class[`Class`] 
| The using declaration&period;
| link:#mrdocs-UsingSymbol-IntroducedName[`IntroducedName`] 
| The symbol being introduced&period;
| link:#mrdocs-UsingSymbol-ShadowDeclarations[`ShadowDeclarations`] 
| The shadow declarations&period;
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-UsingSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-allMembers-0f[`allMembers`]
| Access declarations introduced by this using&hyphen;declaration&period;
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Create a using&hyphen;declaration symbol bound to an ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Using&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
UsingSymbol(link:#mrdocs-SymbolID[SymbolID] ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to construct from
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

The using declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Using&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-UsingClass[UsingClass] Class = UsingClass&colon;&colon;Normal;
----

The symbol being introduced&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Using&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] IntroducedName = Polymorphic&lt;struct Name&gt;(std&colon;&colon;in&lowbar;place&lowbar;type&lt;IdentifierName&gt;);
----

== Description

This is the symbol that is being &quot;used&quot; or introduced into the current scope&period;

Note that this can be a qualified name, such as `A&colon;&colon;f` in the example above&period;

The shadow declarations&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Using&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt; ShadowDeclarations;
----

== Description

A using declaration can refer to and introduce multiple symbols into the current context&period;

These multiple symbols are considered a special case of declarations&colon; &quot;shadow declarations&quot;&period;

This typically happens when there are conflicting symbol names in the scope being introduced, such as&colon;

Overloaded functions&colon; the base namespace contains overloaded functions&period; Name conflicts&colon; the base scope contains a function and a type&period; Enums&colon; a using enum declaration can refer to multiple enumerators&period;

Also note that more shadow declarations can be introduced later in the same scope, after the using declaration&period;

The shadow declarations here are only those that are shadowed at the point where the using declaration is located&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

A variable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct VariableSymbol final
    : link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Variable&gt;]
----

== Description

This includes variables at namespace or record scope&period;

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-SymbolCommonBase-015[SymbolCommonBase&lt;SymbolKind&colon;&colon;Variable&gt;]`
| Base class for providing variant discriminator functions&period;
|===

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-VariableSymbol-2constructor[`VariableSymbol`]         [.small]#[constructor]#
| Create a variable symbol bound to an ID&period;
| link:#mrdocs-VariableSymbol-operator_3way[`operator&lt;&equals;&gt;`] 
| Compare variables by type, flags, and initializer&period;
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mrdocs-VariableSymbol-isConcept[`isConcept`] 
| link:#mrdocs-VariableSymbol-isEnum[`isEnum`] 
| link:#mrdocs-VariableSymbol-isEnumConstant[`isEnumConstant`] 
| link:#mrdocs-VariableSymbol-isFunction[`isFunction`] 
| link:#mrdocs-VariableSymbol-isGuide[`isGuide`] 
| link:#mrdocs-VariableSymbol-isNamespace[`isNamespace`] 
| link:#mrdocs-VariableSymbol-isNamespaceAlias[`isNamespaceAlias`] 
| link:#mrdocs-VariableSymbol-isOverloads[`isOverloads`] 
| link:#mrdocs-VariableSymbol-isRecord[`isRecord`] 
| link:#mrdocs-VariableSymbol-isTypedef[`isTypedef`] 
| link:#mrdocs-VariableSymbol-isUsing[`isUsing`] 
| link:#mrdocs-VariableSymbol-isVariable[`isVariable`] 
|===

== Data Members

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-VariableSymbol-Attributes[`Attributes`] 
| Raw attribute spellings attached to the variable&period;
| link:#mrdocs-VariableSymbol-BitfieldWidth[`BitfieldWidth`] 
| The width of the bitfield
| link:#mrdocs-VariableSymbol-HasNoUniqueAddress[`HasNoUniqueAddress`] 
| Whether the variable uses &lsqb;&lsqb;no&lowbar;unique&lowbar;address&rsqb;&rsqb;&period;
| link:#mrdocs-VariableSymbol-Initializer[`Initializer`] 
| The default member initializer, if any&period;
| link:#mrdocs-VariableSymbol-IsBitfield[`IsBitfield`] 
| Whether the field is a bitfield
| link:#mrdocs-VariableSymbol-IsConstexpr[`IsConstexpr`] 
| Whether the variable is `constexpr`&period;
| link:#mrdocs-VariableSymbol-IsConstinit[`IsConstinit`] 
| Whether the variable is `constinit`&period;
| link:#mrdocs-VariableSymbol-IsDeprecated[`IsDeprecated`] 
| Whether the variable is marked deprecated&period;
| link:#mrdocs-VariableSymbol-IsInline[`IsInline`] 
| Whether the variable is declared `inline`&period;
| link:#mrdocs-VariableSymbol-IsMaybeUnused[`IsMaybeUnused`] 
| Whether the variable carries `&lsqb;&lsqb;maybe&lowbar;unused&rsqb;&rsqb;`&period;
| link:#mrdocs-VariableSymbol-IsMutable[`IsMutable`] 
| Whether the field is declared mutable
| link:#mrdocs-VariableSymbol-IsRecordField[`IsRecordField`] 
| True if this variable is a data member of a record&period;
| link:#mrdocs-VariableSymbol-IsThreadLocal[`IsThreadLocal`] 
| Whether the variable is `thread&lowbar;local`&period;
| link:#mrdocs-VariableSymbol-IsVariant[`IsVariant`] 
| Whether the field is a variant member
| link:#mrdocs-VariableSymbol-StorageClass[`StorageClass`] 
| Storage class specifier applied to the variable&period;
| link:#mrdocs-VariableSymbol-Template[`Template`] 
| The template information, if any&period;
| link:#mrdocs-VariableSymbol-Type[`Type`] 
| The type of the variable
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mrdocs-VariableSymbol-kind_id[`kind&lowbar;id`] 
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-canMerge[`canMerge`]
| Check whether two symbols may be merged&period;
| link:#mrdocs-getPrimaryLocation-0a[`getPrimaryLocation`]
| Determine a location to use when none is explicitly chosen&period;
|===

Create a variable symbol bound to an ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
VariableSymbol(link:#mrdocs-SymbolID[SymbolID] const& ID) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *ID*
| The object to copy construct from
|===

Compare variables by type, flags, and initializer&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(link:#mrdocs-VariableSymbol[VariableSymbol] const& other) const;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *other*
| The right operand
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isConcept() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnum() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isEnumConstant() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isFunction() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isGuide() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespace() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isNamespaceAlias() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isOverloads() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isRecord() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isTypedef() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isUsing() noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolNodes&period;inc&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
isVariable() noexcept;
----

Raw attribute spellings attached to the variable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;std::string&gt; Attributes;
----

The width of the bitfield

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ConstantExprInfo[ConstantExprInfo&lt;uint64&lowbar;t&gt;] BitfieldWidth;
----

Whether the variable uses &lsqb;&lsqb;no&lowbar;unique&lowbar;address&rsqb;&rsqb;&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool HasNoUniqueAddress = false;
----

The default member initializer, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-ExprInfo[ExprInfo] Initializer;
----

Whether the field is a bitfield

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsBitfield = false;
----

Whether the variable is `constexpr`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsConstexpr = false;
----

Whether the variable is `constinit`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsConstinit = false;
----

Whether the variable is marked deprecated&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsDeprecated = false;
----

Whether the variable is declared `inline`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsInline = false;
----

Whether the variable carries `&lsqb;&lsqb;maybe&lowbar;unused&rsqb;&rsqb;`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsMaybeUnused = false;
----

Whether the field is declared mutable

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsMutable = false;
----

True if this variable is a data member of a record&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsRecordField = false;
----

Whether the variable is `thread&lowbar;local`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsThreadLocal = false;
----

Whether the field is a variant member

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool IsVariant = false;
----

Storage class specifier applied to the variable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-StorageClassKind[StorageClassKind] StorageClass = StorageClassKind&colon;&colon;None;
----

The template information, if any&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;TemplateInfo&gt;] Template;
----

The type of the variable

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Variable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] Type = Polymorphic&lt;struct Type&gt;(NamedType&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr static
link:#mrdocs-SymbolKind[SymbolKind] kind&lowbar;id;
----

A visitor for a type

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Visitor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Base,
    typename Fn,
    typename&period;&period;&period; Args&gt;
class Visitor;
----

== Description

This class is used to implement the visitor pattern&period; It stores a reference to an object of type `Base`, and a function object `Fn` which is called with the derived type as the first argument, followed by `Args`&period;

The visitor is constructed with the object to visit, the function object, and the arguments to pass to the function object&period;

The method `visit` is a template which accepts a derived type of `Base`&period; It calls the function object with the derived type as the first argument, followed by the arguments passed to the constructor&period;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-Visitor-2constructor[`Visitor`]         [.small]#[constructor]#
| Constructor
| link:#mrdocs-Visitor-visit[`visit`] 
| Visit a derived type
|===

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *Base*
| The base type of the object
| *Fn*
| The function object type
| *Args*
| The argument types
|===

Constructor

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Visitor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Visitor(
    Base&& obj,
    Fn&& fn,
    Args&&&period;&period;&period; args);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| The object to visit
| *fn*
| The function object to call
| *args*
| The arguments to pass to the function object
|===

Visit a derived type

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Visitor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::derived&lowbar;from&lt;std::remove&lowbar;cvref&lowbar;t&lt;Base&gt;&gt; Derived&gt;
decltype(auto)
visit();
----

== Description

This method calls the function object with the derived type as the first argument, followed by the arguments passed to the constructor&period;

== Return Value

The result of calling the function object

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *Derived*
| The derived type to visit
|===

Enables recursive lambdas by passing a self&hyphen;reference as the first argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
class YCombinator;
----

== Description

YCombinator stores a callable F and exposes operator() that forwards arguments to F, prepending a reference to &ast;this so that F can recurse&period;

Overloads are provided for &amp;, const&amp;, &amp;&amp;, const&amp;&amp; to preserve value category&period;

auto fact &equals; fn&colon;&colon;yCombinator( &lsqb;&rsqb;self, int n) &hyphen;&gt; long long &lcub; return n &lt;&equals; 1 ? 1 &colon; n &ast; self(n &hyphen; 1)&semi; &rcub;)&semi; auto r &equals; fact(10)&semi;

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-YCombinator-2constructor[`YCombinator`]         [.small]#[constructor]#
| Constructs a YCombinator from the given callable&period;
| link:#mrdocs-YCombinator-operator_call-0c[`operator()`] 
| Function call operators
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-yCombinator[`yCombinator`]
| Factory that creates a YCombinator from a callable&period;
|===

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *F*
| The callable to wrap&period;
|===

Constructs a YCombinator from the given callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
YCombinator(F f) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;F&gt;);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The callable to store&period;
|===

Function call operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

Invokes the stored callable, passing &ast;this as the first parameter&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
link:#mrdocs-YCombinator-operator_call-0b[operator()](Args&&&period;&period;&period; args) &amp;;
----

[.small]#link:#mrdocs-YCombinator-operator_call-0b[_» more&period;&period;&period;_]#

Const lvalue overload of operator()&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
link:#mrdocs-YCombinator-operator_call-0f[operator()](Args&&&period;&period;&period; args) const &amp;;
----

[.small]#link:#mrdocs-YCombinator-operator_call-0f[_» more&period;&period;&period;_]#

Rvalue overload of operator()&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
link:#mrdocs-YCombinator-operator_call-00[operator()](Args&&&period;&period;&period; args) &amp;&amp;;
----

[.small]#link:#mrdocs-YCombinator-operator_call-00[_» more&period;&period;&period;_]#

Const rvalue overload of operator()&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
link:#mrdocs-YCombinator-operator_call-08[operator()](Args&&&period;&period;&period; args) const &amp;&amp;;
----

[.small]#link:#mrdocs-YCombinator-operator_call-08[_» more&period;&period;&period;_]#

== Return Value

Whatever the callable returns&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to forward to the callable after the self reference&period;
|===

Invokes the stored callable, passing &ast;this as the first parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
operator()(Args&&&period;&period;&period; args) &amp;;
----

== Return Value

Whatever the callable returns&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to forward to the callable after the self reference&period;
|===

Const lvalue overload of operator()&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
operator()(Args&&&period;&period;&period; args) const &amp;;
----

== Return Value

Whatever the callable returns&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to forward to the callable after the self reference&period;
|===

Rvalue overload of operator()&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
operator()(Args&&&period;&period;&period; args) &amp;&amp;;
----

== Return Value

Whatever the callable returns&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to forward to the callable after the self reference&period;
|===

Const rvalue overload of operator()&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
operator()(Args&&&period;&period;&period; args) const &amp;&amp;;
----

== Return Value

Whatever the callable returns&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| The arguments to forward to the callable after the self reference&period;
|===

Propagate const qualification from `From` to `To`, keeping references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
struct add&lowbar;const&lowbar;from
    : std::conditional&lt;std&colon;&colon;is&lowbar;const&lowbar;v&lt;std&colon;&colon;remove&lowbar;reference&lowbar;t&lt;From&gt;&gt;, add&lowbar;reference&lowbar;from&lowbar;t&lt;To, std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&gt;, To&gt;
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `std::conditional&lt;std&colon;&colon;is&lowbar;const&lowbar;v&lt;std&colon;&colon;remove&lowbar;reference&lowbar;t&lt;From&gt;&gt;, add&lowbar;reference&lowbar;from&lowbar;t&lt;To, std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&gt;, To&gt;`
| 
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-add_cv_from[`add&lowbar;cv&lowbar;from`]
| Propagate both const and volatile qualifiers from `From` to `To`&period;
|===

Propagate both const and volatile qualifiers from `From` to `To`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
struct add&lowbar;cv&lowbar;from
    : link:#mrdocs-add_const_from[add&lowbar;const&lowbar;from&lt;From, add&lowbar;volatile&lowbar;from&lowbar;t&lt;From, To&gt;&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-add_const_from[add&lowbar;const&lowbar;from&lt;From, add&lowbar;volatile&lowbar;from&lowbar;t&lt;From, To&gt;&gt;]`
| Propagate const qualification from `From` to `To`, keeping references&period;
|===

Propagate cv&hyphen;qualification and reference category from `From` to `To`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
struct add&lowbar;cvref&lowbar;from
    : link:#mrdocs-add_reference_from[add&lowbar;reference&lowbar;from&lt;From, add&lowbar;cv&lowbar;from&lowbar;t&lt;From, To&gt;&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-add_reference_from[add&lowbar;reference&lowbar;from&lt;From, add&lowbar;cv&lowbar;from&lowbar;t&lt;From, To&gt;&gt;]`
| Propagate reference qualification from `From` to `To`&period;
|===

Propagate lvalue&hyphen;reference from `From` to `To` if present&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
struct add&lowbar;lvalue&lowbar;reference&lowbar;from
    : std::conditional&lt;std&colon;&colon;is&lowbar;lvalue&lowbar;reference&lowbar;v&lt;From&gt;, std::add&lowbar;lvalue&lowbar;reference&lowbar;t&lt;To&gt;, To&gt;
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `std::conditional&lt;std&colon;&colon;is&lowbar;lvalue&lowbar;reference&lowbar;v&lt;From&gt;, std::add&lowbar;lvalue&lowbar;reference&lowbar;t&lt;To&gt;, To&gt;`
| 
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-add_reference_from[`add&lowbar;reference&lowbar;from`]
| Propagate reference qualification from `From` to `To`&period;
|===

Propagate reference qualification from `From` to `To`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
struct add&lowbar;reference&lowbar;from
    : link:#mrdocs-add_lvalue_reference_from[add&lowbar;lvalue&lowbar;reference&lowbar;from&lt;From, add&lowbar;rvalue&lowbar;reference&lowbar;from&lowbar;t&lt;From, To&gt;&gt;]
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `link:#mrdocs-add_lvalue_reference_from[add&lowbar;lvalue&lowbar;reference&lowbar;from&lt;From, add&lowbar;rvalue&lowbar;reference&lowbar;from&lowbar;t&lt;From, To&gt;&gt;]`
| Propagate lvalue&hyphen;reference from `From` to `To` if present&period;
|===

== Derived Classes

[cols="1,4"]
|===
|Name|Description

| link:#mrdocs-add_cvref_from[`add&lowbar;cvref&lowbar;from`]
| Propagate cv&hyphen;qualification and reference category from `From` to `To`&period;
|===

Propagate rvalue&hyphen;reference from `From` to `To` if present&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
struct add&lowbar;rvalue&lowbar;reference&lowbar;from
    : std::conditional&lt;std&colon;&colon;is&lowbar;rvalue&lowbar;reference&lowbar;v&lt;From&gt;, std::add&lowbar;rvalue&lowbar;reference&lowbar;t&lt;To&gt;, To&gt;
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `std::conditional&lt;std&colon;&colon;is&lowbar;rvalue&lowbar;reference&lowbar;v&lt;From&gt;, std::add&lowbar;rvalue&lowbar;reference&lowbar;t&lt;To&gt;, To&gt;`
| 
|===

Propagate volatile qualification from `From` to `To`, keeping references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
struct add&lowbar;volatile&lowbar;from
    : std::conditional&lt;std&colon;&colon;is&lowbar;volatile&lowbar;v&lt;std&colon;&colon;remove&lowbar;reference&lowbar;t&lt;From&gt;&gt;, add&lowbar;reference&lowbar;from&lowbar;t&lt;To, std::remove&lowbar;reference&lowbar;t&lt;To&gt; volatile&gt;, To&gt;
----

== Base Classes

[cols="1,4"]
|===
|Name|Description

| `std::conditional&lt;std&colon;&colon;is&lowbar;volatile&lowbar;v&lt;std&colon;&colon;remove&lowbar;reference&lowbar;t&lt;From&gt;&gt;, add&lowbar;reference&lowbar;from&lowbar;t&lt;To, std::remove&lowbar;reference&lowbar;t&lt;To&gt; volatile&gt;, To&gt;`
| 
|===

A movable, type&hyphen;erased function object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;any&lowbar;callable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&gt;
class any&lowbar;callable;
----

== Description

Usage&colon;

[,cpp]
----
any_callable<void(void)> f;
----
Type&hyphen;erased callable wrapper for signature `R(Args&period;&period;&period;)`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;any&lowbar;callable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class R,
    class&period;&period;&period; Args&gt;
class link:#mrdocs-any_callable-01[any&lowbar;callable]&lt;R(Args&period;&period;&period;)&gt;;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-any_callable-0a-2constructor-06[`any&lowbar;callable`]         [.small]#[constructor]# [.small]#[deleted]#
| Constructors
| link:#mrdocs-any_callable-0a-operator_call[`operator()`] 
| Invoke the stored callable&period;
|===

Constructors

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;any&lowbar;callable&period;hpp&gt;`

Deleted default constructor to prevent empty call targets&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-any_callable-0a-2constructor-0a[any&lowbar;callable]() = delete;
----

[.small]#link:#mrdocs-any_callable-0a-2constructor-0a[_» more&period;&period;&period;_]#

Construct from a callable object matching the signature&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Callable&gt;
requires std&colon;&colon;is&lowbar;invocable&lowbar;r&lowbar;v&lt;R, Callable, Args&period;&period;&period;&gt;
link:#mrdocs-any_callable-0a-2constructor-05[any&lowbar;callable](Callable&& f);
----

[.small]#link:#mrdocs-any_callable-0a-2constructor-05[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Callable to store&semi; must satisfy `R(Args&period;&period;&period;)`&period;
|===

Deleted default constructor to prevent empty call targets&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;any&lowbar;callable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
any&lowbar;callable() = delete;
----

Construct from a callable object matching the signature&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;any&lowbar;callable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Callable&gt;
requires std&colon;&colon;is&lowbar;invocable&lowbar;r&lowbar;v&lt;R, Callable, Args&period;&period;&period;&gt;
any&lowbar;callable(Callable&& f);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| Callable to store&semi; must satisfy `R(Args&period;&period;&period;)`&period;
|===

Invoke the stored callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;any&lowbar;callable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
R
operator()(Args&&&period;&period;&period; args) const;
----

== Return Value

Result of the wrapped callable&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *args*
| Arguments forwarded to the callable&period;
|===

Dependent alias of `T`, useful for delaying instantiation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
struct make&lowbar;dependent;
----

== Types

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-make_dependent-type[`type`] 
| Make a type dependent on another template parameter&period;
|===

Make a type dependent on another template parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using type = T;
----

nullable&lowbar;traits&lt;T&gt; defines how to treat a T as “nullable” without an external engaged bit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
struct nullable&lowbar;traits;
----

== Description

This trait is the canonical place to encode nullability semantics used by any optional&hyphen;like type&period;

It exposes the minimal operations needed by an optional&colon;

* is&lowbar;null(const T&amp;)&colon; test if a value is null&period;
* null()&colon; create a null value&period;
* make&lowbar;null(T&amp;)&colon; turn an existing value into null&period;

Users may explicitly specialize nullable&lowbar;traits for their types to define the desired semantics&period;

nullable&lowbar;traits specialization for Location&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&gt;
struct link:#mrdocs-nullable_traits-0b[nullable&lowbar;traits]&lt;link:#mrdocs-Location[Location]&gt;;
----

== Description

Semantics

* The “null” (sentinel) state is any Location whose ShortPath is empty&period;
* Creating a null value produces a Location with all fields defaulted and ShortPath empty&period;
* Making an existing value null clears ShortPath and resets the other fields to their defaults&period;

Rationale

* This mirrors the old LocationEmptyPredicate, which treated an empty ShortPath as “empty&sol;null&period;”

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-nullable_traits-00-is_null[`is&lowbar;null`] 
| Test if the location is null (empty ShortPath)&period;
| link:#mrdocs-nullable_traits-00-make_null[`make&lowbar;null`] 
| Reset a location to the null sentinel state&period;
| link:#mrdocs-nullable_traits-00-null[`null`] 
| Create a null location sentinel&period;
|===

Test if the location is null (empty ShortPath)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
is&lowbar;null(link:#mrdocs-Location[Location] const& v) noexcept;
----

== Return Value

True when `ShortPath` is empty&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Source location of a symbol or entity&period;
|===

Reset a location to the null sentinel state&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
void
make&lowbar;null(link:#mrdocs-Location[Location]& v) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Source location of a symbol or entity&period;
|===

Create a null location sentinel&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
link:#mrdocs-Location[Location]
null() noexcept;
----

== Return Value

Location with every field cleared&period;

nullable&lowbar;traits for types with a sentinel&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
requires (!HasSentinel&lt;T&gt; &amp;&amp; ClearableContainerLike&lt;T&gt;)
struct link:#mrdocs-nullable_traits-0b[nullable&lowbar;traits]&lt;T&gt;;
----

== Description

Delegates null handling to sentinel&lowbar;traits&lt;T&gt;&period;

nullable&lowbar;traits for clearable empty types&period;

Treats the empty state as null, creates null via default construction, and erases via clear()&period;

Return true if `v` is empty&period;

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-nullable_traits-06-is_null[`is&lowbar;null`] 
| Return true if `v` matches the sentinel for `T&period;`
| link:#mrdocs-nullable_traits-06-make_null[`make&lowbar;null`] 
| Overwrite `v` with the sentinel null value&period;
| link:#mrdocs-nullable_traits-06-null[`null`] 
| Return the sentinel value representing null&period;
|===

== Return Value

`true` when the container is empty&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Value to test&period;
|===

Return true if `v` matches the sentinel for `T&period;`

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
is&lowbar;null(T const& v) noexcept(noexcept(v&period;empty()));
----

== Return Value

`true` when `v` equals the sentinel&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Value to test&period;
|===

Overwrite `v` with the sentinel null value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
void
make&lowbar;null(T& v) noexcept(noexcept(v&period;clear()));
----

== Description

Clear `v` to its null (empty) state&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Value to clear&period;
|===

Return the sentinel value representing null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
T
null() noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;default&lowbar;constructible&lowbar;v&lt;T&gt;);
----

== Description

Construct a null value using the default constructor&period;

== Return Value

* Sentinel value for `T&period;`
* Default&hyphen;constructed `T&period;`

nullable&lowbar;traits for Polymorphic&lt;T&gt;&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
struct link:#mrdocs-nullable_traits-0b[nullable&lowbar;traits]&lt;link:#mrdocs-Polymorphic[Polymorphic&lt;T&gt;]&gt;;
----

== Description

Only this friend specialization can create&sol;reset the null state&period;

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-nullable_traits-0c-is_null[`is&lowbar;null`] 
| Return true if the polymorphic value is disengaged&period;
| link:#mrdocs-nullable_traits-0c-make_null[`make&lowbar;null`] 
| Reset the polymorphic value to null&period;
| link:#mrdocs-nullable_traits-0c-null[`null`] 
| Return a null polymorphic instance&period;
|===

Return true if the polymorphic value is disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
is&lowbar;null(link:#mrdocs-Polymorphic[Polymorphic&lt;T&gt;] const& v) noexcept;
----

== Return Value

`true` when `v` does not hold an object&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Value to test&period;
|===

Reset the polymorphic value to null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
void
make&lowbar;null(link:#mrdocs-Polymorphic[Polymorphic&lt;T&gt;]& v) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Value to clear&period;
|===

Return a null polymorphic instance&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
link:#mrdocs-Polymorphic[Polymorphic&lt;T&gt;]
null() noexcept;
----

== Return Value

Disengaged Polymorphic&period;

Defines a customization point for types that have an intrinsic sentinel value denoting “null”&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
struct sentinel&lowbar;traits;
----

== Description

Users may specialize this trait for their own types to declare a sentinel&hyphen;based null representation&period;

When enabled, nullable semantics can be implemented in terms of the sentinel without storing a separate engaged&sol;disengaged flag&period;

Contract for specializations&colon;

* Provide static constexpr T sentinel() noexcept&semi; which returns the distinguished null value&period;
* Provide static constexpr bool is&lowbar;sentinel(const T&amp;) noexcept&semi; which recognizes the null value&period;

If a type does not have a well&hyphen;defined sentinel, leave the primary template in effect&period;

Notes

* Built&hyphen;in pointer types and std&colon;&colon;nullptr&lowbar;t are pre&hyphen;specialized to use nullptr as the sentinel&period;

sentinel&lowbar;traits specialization for std&colon;&colon;nullptr&lowbar;t&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&gt;
struct link:#mrdocs-sentinel_traits-0a[sentinel&lowbar;traits]&lt;std::nullptr&lowbar;t&gt;;
----

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-sentinel_traits-03a-is_sentinel[`is&lowbar;sentinel`] 
| Return true if the value equals the sentinel&period;
| link:#mrdocs-sentinel_traits-03a-sentinel[`sentinel`] 
| Return the sentinel value for std&colon;&colon;nullptr&lowbar;t&period;
|===

Return true if the value equals the sentinel&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
is&lowbar;sentinel(std::nullptr&lowbar;t) noexcept;
----

== Return Value

Always true because the sentinel is unique&period;

Return the sentinel value for std&colon;&colon;nullptr&lowbar;t&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
std::nullptr&lowbar;t
sentinel() noexcept;
----

== Return Value

the sentinel value for std&colon;&colon;nullptr&lowbar;t&period;

sentinel&lowbar;traits specialization for unsigned integral types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::floating&lowbar;point T&gt;
requires std&colon;&colon;is&lowbar;enum&lowbar;v&lt;T&gt; &amp;&amp;
         (requires &lcub; T&colon;&colon;unknown&semi; &rcub; &verbar;&verbar;
          requires &lcub; T&colon;&colon;Unknown&semi; &rcub; &verbar;&verbar;
          requires &lcub; T&colon;&colon;UNKNOWN&semi; &rcub; &verbar;&verbar;
          requires &lcub; T&colon;&colon;none&semi; &rcub; &verbar;&verbar;
          requires &lcub; T&colon;&colon;None&semi; &rcub; &verbar;&verbar;
          requires &lcub; T&colon;&colon;NONE&semi; &rcub;)
struct link:#mrdocs-sentinel_traits-0a[sentinel&lowbar;traits]&lt;T&gt;;
----

== Description

Uses the maximum representable value (&#126;0u) as the sentinel, which corresponds to &hyphen;1 when converted&period;

sentinel&lowbar;traits specialization for floating&hyphen;point types&period;

Uses a quiet NaN as the sentinel value&period; This assumes that T supports NaN and that it is distinguishable from all ordinary values&period;

Return the floating&hyphen;point NaN sentinel&period;

sentinel&lowbar;traits specialization for enums with a well&hyphen;known &quot;null&quot; enumerator&period;

If the enum defines Unknown, UNKNOWN, None, or NONE, this trait uses that enumerator as the sentinel&period; This requires that such an enumerator exists and is accessible from the scope of T&period;

Return the enum sentinel value&period;

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-sentinel_traits-01-is_sentinel[`is&lowbar;sentinel`] 
| Return true if the value equals the sentinel&period;
| link:#mrdocs-sentinel_traits-01-sentinel[`sentinel`] 
| Return the sentinel value (&#126;0u)&period;
|===

Return true if the value equals the sentinel&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
is&lowbar;sentinel(T v) noexcept;
----

== Description

Return true if `v` is the NaN sentinel&period;

Return true if `v` equals the sentinel value&period;

== Return Value

* `true` when `v` equals the sentinel&period;
* `true` when `v` is NaN&period;
* `true` when `v` matches the sentinel enumerator&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| Value to test&period;
|===

Return the sentinel value (&#126;0u)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
T
sentinel() noexcept;
----

== Return Value

the sentinel value (&#126;0u)&period;

sentinel&lowbar;traits specialization for raw pointers&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
struct link:#mrdocs-sentinel_traits-0a[sentinel&lowbar;traits]&lt;T*&gt;;
----

== Description

Uses nullptr as the sentinel value&period;

== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-sentinel_traits-03c-is_sentinel[`is&lowbar;sentinel`] 
| Return true if the pointer equals the sentinel&period;
| link:#mrdocs-sentinel_traits-03c-sentinel[`sentinel`] 
| Return the sentinel pointer value (nullptr)&period;
|===

Return true if the pointer equals the sentinel&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
bool
is&lowbar;sentinel(T const* p) noexcept;
----

== Return Value

`true` when `p` is nullptr&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *p*
| Pointer to test&period;
|===

Return the sentinel pointer value (nullptr)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
T*
sentinel() noexcept;
----

== Return Value

the sentinel pointer value (nullptr)&period;

Tag type used to select unexpected construction&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct unexpect&lowbar;t;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-unexpect_t-2constructor[`unexpect&lowbar;t`]         [.small]#[constructor]#
| Default constructor&period;
|===

Default constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit
unexpect&lowbar;t() = default;
----

A scoped guard which unlocks a mutex&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;unlock&lowbar;guard&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class unlock&lowbar;guard;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| link:#mrdocs-unlock_guard-2constructor[`unlock&lowbar;guard`]         [.small]#[constructor]#
| Constructor&period;
| link:#mrdocs-unlock_guard-2destructor[`&#126;unlock&lowbar;guard`] [.small]#[destructor]#
| Destructor&period;
|===

Constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;unlock&lowbar;guard&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
unlock&lowbar;guard(std::mutex& m);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *m*
| The object to copy construct from
|===

Destructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;unlock&lowbar;guard&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;unlock&lowbar;guard();
----

Access specifier&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;AccessKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class AccessKind : int;
----

== Description

None is set to zero since it is the most frequently occurring access, and it is elided by the bitstream encoder because it has an all&hyphen;zero bit pattern&period; This improves compression in the bitstream&period;

None is used for namespace members and friend&semi; such declarations have no access&period;

== Members

[cols="1,4"]
|===
| Name| Description
| `None` 
| Unspecified access
| `Public` 
| Public access
| `Protected` 
| Protected access
| `Private` 
| Private access
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-0d3[`toString`]
| Convert access specifier to its string form&period;
|===

The kind of `auto` keyword used in a declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;AutoKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class AutoKind : int;
----

== Description

This is either `auto` or `decltype(auto)`&period;

== Members

[cols="1,4"]
|===
| Name| Description
| `Auto` 
| The `auto` keyword
| `DecltypeAuto` 
| The `decltype(auto)` keyword
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-0f4[`toString`]
| Convert an auto&hyphen;kind to its spelling&period;
|===

`constexpr`&sol;`consteval` specifier kinds

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ConstexprKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class ConstexprKind : int;
----

== Description

&lsqb;dcl&period;spec&period;general&rsqb;p2&colon; At most one of the `constexpr`, `consteval`, and `constinit` keywords shall appear in a decl&hyphen;specifier&hyphen;seq

== Members

[cols="1,4"]
|===
| Name| Description
| `None` 
| No `constexpr` or `consteval` specifier
| `Constexpr` 
| The `constexpr` specifier
| `Consteval` 
| The `consteval` specifier only valid for functions
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-0fa[`toString`]
| Convert a constexpr&sol;consteval specifier kind to a string&period;
|===

Explicit specifier kinds

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class ExplicitKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `False` 
| No explicit&hyphen;specifier or explicit&hyphen;specifier evaluated to false
| `True` 
| explicit&hyphen;specifier evaluates to true
| `Dependent` 
| Dependent explicit&hyphen;specifier
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-01b5[`toString`]
| Convert an explicit kind to its string form&period;
|===

Determine why a symbol is extracted

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;ExtractionMode&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class ExtractionMode : int;
----

== Description

The enum constants are ordered by specificity, with the least specific at the beginning and the most specific at the end&period;

== Members

[cols="1,4"]
|===
| Name| Description
| `Regular` 
| We&apos;re extracting the current symbol because it passes all filters&period;
| `SeeBelow` 
| We&apos;re extracting the current symbol because it passes all filters, but we should also tag it as see&hyphen;below because it passes one of the see&hyphen;below filters&period; This symbol has its own page but it has no details and no child members&period;
| `ImplementationDefined` 
| We&apos;re extracting the current symbol because it passes all filters, but we should also tag it as implementation&hyphen;defined because one of its parents matches the implementation&hyphen;defined filter&period; This symbol has no page and other symbols that depend on it will just render &sol;_implementation&hyphen;defined_&sol;&period;
| `Dependency` 
| We&apos;re extracting the current symbol even though it doesn&apos;t pass all filters because it&apos;s a direct dependency of a symbol that does pass all filters and needs information about it (e&period;g&period;&colon; base classes outside the filters)&period; This symbol has no page and it might even deleted from the corpus if no other symbol depends on it after we extracted the information we wanted from it in post&hyphen;processing steps&period;
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-leastSpecific[`leastSpecific`]
| Compare ExtractionModes and returns the least specific
| link:#mrdocs-merge-0dd8[`merge`]
| Merge two ExtractionMode values&period;
| link:#mrdocs-mostSpecific[`mostSpecific`]
| Compare ExtractionModes and returns the most specific
|===

Classifies where a file originates from&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;FileKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class FileKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `Source` 
| File in the source directory
| `System` 
| File in a system include directory
| `Other` 
| File outside the source directory
|===

Function classifications

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;FunctionClass&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class FunctionClass : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `Normal` 
| The function is a normal function&period;
| `Constructor` 
| The function is a constructor&period;
| `Conversion` 
| The function is a conversion operator&period;
| `Destructor` 
| The function is a destructor&period;
|===

Categorically describes a fundamental type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class FundamentalTypeKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `Void` 
| void
| `Nullptr` 
| std&colon;&colon;nullptr&lowbar;t
| `Bool` 
| bool
| `Char` 
| char
| `SignedChar` 
| signed char
| `UnsignedChar` 
| unsigned char
| `Char8` 
| char8&lowbar;t
| `Char16` 
| char16&lowbar;t
| `Char32` 
| char32&lowbar;t
| `WChar` 
| wchar&lowbar;t
| `Short` 
| short &sol; short int &sol; signed short &sol; signed short int
| `UnsignedShort` 
| unsigned short &sol; unsigned short int
| `Int` 
| int &sol; signed &sol; signed int
| `UnsignedInt` 
| unsigned &sol; unsigned int
| `Long` 
| long &sol; long int &sol; signed long &sol; signed long int
| `UnsignedLong` 
| unsigned long &sol; unsigned long int
| `LongLong` 
| long long &sol; long long int &sol; signed long long &sol; signed long long int
| `UnsignedLongLong` 
| unsigned long long &sol; unsigned long long int
| `Float` 
| float
| `Double` 
| double
| `LongDouble` 
| long double
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-makeChar[`makeChar`]
| Apply the &quot;char&quot; specifier to the type
| link:#mrdocs-makeLong[`makeLong`]
| Apply the &quot;long&quot; specifier to the type
| link:#mrdocs-makeShort[`makeShort`]
| Apply the &quot;short&quot; specifier to the type
| link:#mrdocs-makeSigned[`makeSigned`]
| Apply the &quot;signed&quot; specifier to the type
| link:#mrdocs-makeUnsigned[`makeUnsigned`]
| Apply the &quot;unsigned&quot; specifier to the type
| link:#mrdocs-toString-0b[`toString`]
| Convert a FundamentalTypeKind to a string&period;
|===

== See Also

https&colon;&sol;&sol;en&period;cppreference&period;com&sol;w&sol;cpp&sol;language&sol;types

Classification of list ordering&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;ListKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class ListKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `Unordered` 
| A bulleted list with no inherent ordering&period;
| `Ordered` 
| A numbered list where item order matters&period;
|===

Kinds of names that appear in type and symbol metadata&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class NameKind : int;
----

Exception specification kinds

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class NoexceptKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `False` 
| Potentially&hyphen;throwing exception specification
| `True` 
| Non&hyphen;throwing exception specification
| `Dependent` 
| Dependent exception specification
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-093[`toString`]
| Convert a noexcept kind to its string form&period;
|===

Operator kinds

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class OperatorKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `None` 
| No operator
| `New` 
| The `new` Operator
| `Delete` 
| The `delete` Operator
| `ArrayNew` 
| The `new&lsqb;&rsqb;` Operator
| `ArrayDelete` 
| The `delete&lsqb;&rsqb;` Operator
| `Plus` 
| The &plus; Operator
| `Minus` 
| The &hyphen; Operator
| `Star` 
| The &ast; Operator
| `Slash` 
| The &sol; Operator
| `Percent` 
| The % Operator
| `Caret` 
| The &circ; Operator
| `Amp` 
| The &amp; Operator
| `Pipe` 
| The &verbar; Operator
| `Tilde` 
| The &#126; Operator
| `Equal` 
| The ! Operator
| `PlusEqual` 
| The &plus;&equals; Operator
| `MinusEqual` 
| The &hyphen;&equals; Operator
| `StarEqual` 
| The &ast;&equals; Operator
| `SlashEqual` 
| The &sol;&equals; Operator
| `PercentEqual` 
| The %&equals; Operator
| `CaretEqual` 
| The &circ;&equals; Operator
| `AmpEqual` 
| The &amp;&equals; Operator
| `PipeEqual` 
| The &verbar;&equals; Operator
| `LessLess` 
| The &lt;&lt; Operator
| `GreaterGreater` 
| The &gt;&gt; Operator
| `LessLessEqual` 
| The &lt;&lt;&equals; Operator
| `GreaterGreaterEqual` 
| The &gt;&gt;&equals; Operator
| `Exclaim` 
| The ! Operator
| `EqualEqual` 
| The &equals;&equals; Operator
| `ExclaimEqual` 
| The !&equals; Operator
| `Less` 
| The &lt; Operator
| `LessEqual` 
| The &lt;&equals; Operator
| `Greater` 
| The &gt; Operator
| `GreaterEqual` 
| The &gt;&equals; Operator
| `Spaceship` 
| The &lt;&equals;&gt; Operator
| `AmpAmp` 
| The &amp;&amp; Operator
| `PipePipe` 
| The &verbar;&verbar; Operator
| `PlusPlus` 
| The &plus;&plus; Operator
| `MinusMinus` 
| The &hyphen;&hyphen; Operator
| `Comma` 
| The , Operator
| `ArrowStar` 
| The &hyphen;&gt;&ast; Operator
| `Arrow` 
| The &hyphen;&gt; Operator
| `Call` 
| The () Operator
| `Subscript` 
| The &lsqb;&rsqb;Operator
| `Conditional` 
| The `? &colon;` Operator
| `Coawait` 
| The `coawait` Operator
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-getOperatorKind[`getOperatorKind`]
| Return the short name of an operator as a string&period;
| link:#mrdocs-getOperatorKindFromSuffix[`getOperatorKindFromSuffix`]
| Return the short name of an operator as a string&period;
| link:#mrdocs-getOperatorName[`getOperatorName`]
| Return the name of an operator as a string&period;
| link:#mrdocs-getOperatorReadableName[`getOperatorReadableName`]
| Return the human&hyphen;readable name of the operator
| link:#mrdocs-getSafeOperatorName[`getSafeOperatorName`]
| Return the safe name of an operator as a string&period;
| link:#mrdocs-getShortOperatorName[`getShortOperatorName`]
| Return the short name of an operator as a string&period;
| link:#mrdocs-isBinaryOperator[`isBinaryOperator`]
| Determines whether the operator is potentially binary&period;
| link:#mrdocs-isUnaryOperator[`isUnaryOperator`]
| Determines whether the operator is potentially unary&period;
|===

Type qualifiers

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;QualifierKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum QualifierKind;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `None` 
| No qualifiers
| `Const` 
| The const qualifier
| `Volatile` 
| The volatile qualifier
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-09c[`toString`]
| Convert a cv&sol;ref qualifier kind to its string form&period;
|===

The kind of record&colon; struct, class, or union&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordKeyKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class RecordKeyKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `Struct` 
| A struct&period;
| `Class` 
| A C&plus;&plus; class&period;
| `Union` 
| A C&hyphen;style Union
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-getDefaultAccessString[`getDefaultAccessString`]
| Return the default accessibility for a record key kind&period;
|===

Reference type kinds

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ReferenceKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class ReferenceKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `None` 
| Not a reference
| `LValue` 
| An L&hyphen;Value reference
| `RValue` 
| An R&hyphen;Value reference
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-01bf[`toString`]
| Convert a reference kind to its string representation&period;
|===

Storage class kinds

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;StorageClassKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class StorageClassKind : int;
----

== Description

&lsqb;dcl&period;stc&rsqb;p1&colon; At most one storage&hyphen;class&hyphen;specifier shall appear in a given decl&hyphen;specifier&hyphen;seq, except that `thread&lowbar;local` may appear with `static` or `extern`&period;

== Members

[cols="1,4"]
|===
| Name| Description
| `None` 
| No storage class specifier
| `Extern` 
| thread&lowbar;local storage&hyphen;class&hyphen;specifier
| `Static` 
| mutable storage&hyphen;class&hyphen;specifier
| `Auto` 
| auto storage&hyphen;class&hyphen;specifier (removed in C&plus;&plus;11) only valid for variables
| `Register` 
| register storage&hyphen;class&hyphen;specifier (removed in C&plus;&plus;17) only valid for variables
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-05[`toString`]
| Convert a storage class kind to its string form&period;
|===

Info variant discriminator

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class SymbolKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `None` 
| Kind is not specified&period;
|===

The kind of template argument&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class TArgKind : int;
----

The keyword a template parameter was declared with

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamKeyKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class TParamKeyKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `Class` 
| Class keyword
| `Typename` 
| Typename keyword
|===

Discriminates the different template parameter categories&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class TParamKind : int;
----

Horizontal alignment for table columns&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&sol;Block&sol;TableAlignmentKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class TableAlignmentKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `None` 
| No explicit alignment&semi; renderer default applies&period;
| `Left` 
| Align content to the left edge&period;
| `Center` 
| Center the content&period;
| `Right` 
| Align content to the right edge&period;
|===

The kind of template or specialization&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class TemplateSpecKind : int;
----

== Members

[cols="1,4"]
|===
| Name| Description
| `Primary` 
| Primary template
| `Explicit` 
| Full template specialization
| `Partial` 
| Partial template specialization
|===

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-06[`toString`]
| Convert the specialization kind to a readable string&period;
|===

Variants of C&plus;&plus; types captured in metadata&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class TypeKind : int;
----

== Non-Member Functions

[cols="1,4"]
|===
| Name
| Description
| link:#mrdocs-toString-0e[`toString`]
| Convert a TypeKind to its string representation&period;
|===

The class of using declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Using&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class UsingClass : int;
----

== Description

This indicates whether the using declaration is a normal `using`, a `using typename`, or a `using enum`&period;

== Members

[cols="1,4"]
|===
| Name| Description
| `Normal` 
| Using declaration class&period;
| `Typename` 
| Using typename declaration class&period;
| `Enum` 
| Using enum declaration class&period;
|===

Compares two polymorphic objects that have visit functions

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Compares two polymorphic objects that have visit functions


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Base&gt;
requires (!detail&colon;&colon;IsPolymorphic&lt;Base&gt;) &amp;&amp; detail&colon;&colon;CanVisitCompare&lt;Base&gt;
auto
link:#mrdocs-CompareDerived-0c[CompareDerived](
    Base const& lhs,
    Base const& rhs);
----

[.small]#link:#mrdocs-CompareDerived-0c[_» more&period;&period;&period;_]#

Compares two polymorphic objects that have visit functions


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Base&gt;
requires detail&colon;&colon;CanVisitCompare&lt;Base&gt;
auto
link:#mrdocs-CompareDerived-06[CompareDerived](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& rhs);
----

[.small]#link:#mrdocs-CompareDerived-06[_» more&period;&period;&period;_]#

== Return Value

true if the two Polymorphic objects are equal, otherwise false&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *Base*
| The type of the Polymorphic&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The first Polymorphic to compare&period;
| *rhs*
| The second Polymorphic to compare&period;
|===

Compares two polymorphic objects that have visit functions

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Base&gt;
requires (!detail&colon;&colon;IsPolymorphic&lt;Base&gt;) &amp;&amp; detail&colon;&colon;CanVisitCompare&lt;Base&gt;
auto
CompareDerived(
    Base const& lhs,
    Base const& rhs);
----

== Description

This function compares two Polymorphic objects that have visit functions for the Base type&period;

The visit function is used to compare the two objects if they are of the same derived type&period;

If the two objects are of different derived types, the comparison is based on the type&lowbar;info of the derived types&period;

If any of the objects is empty, the comparison is based on the emptiness of the objects&period;

== Return Value

true if the two Polymorphic objects are equal, otherwise false&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *Base*
| The type of the Polymorphic&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The first Polymorphic to compare&period;
| *rhs*
| The second Polymorphic to compare&period;
|===

Compares two polymorphic objects that have visit functions

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Base&gt;
requires detail&colon;&colon;CanVisitCompare&lt;Base&gt;
auto
CompareDerived(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& rhs);
----

== Description

This function compares two Polymorphic objects that have visit functions for the Base type&period;

The visit function is used to compare the two objects if they are of the same derived type&period;

If the two objects are of different derived types, the comparison is based on the type&lowbar;info of the derived types&period;

If any of the objects is empty, the comparison is based on the emptiness of the objects&period;

== Return Value

true if the two Polymorphic objects are equal, otherwise false&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *Base*
| The type of the Polymorphic&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The first Polymorphic to compare&period;
| *rhs*
| The second Polymorphic to compare&period;
|===

`HTMLEscape` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

HTML escapes the specified string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-HTMLEscape-06[HTMLEscape](std::string&lowbar;view str);
----

[.small]#link:#mrdocs-HTMLEscape-06[_» more&period;&period;&period;_]#

HTML escapes the specified string


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-HTMLEscape-04[HTMLEscape](
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view str);
----

[.small]#link:#mrdocs-HTMLEscape-04[_» more&period;&period;&period;_]#

== Return Value

The escaped string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to escape&period;
| *out*
| The output stream reference where the escaped string will be written&period;
|===

== See Also

https&colon;&sol;&sol;github&period;com&sol;handlebars&hyphen;lang&sol;handlebars&period;js&sol;blob&sol;master&sol;lib&sol;handlebars&sol;utils&period;js

HTML escapes the specified string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
HTMLEscape(std::string&lowbar;view str);
----

== Description

This function HTML escapes the specified string, making it safe for rendering as text within HTML content&period;

Replaces `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&apos;`, `, `&equals;&grave; with the HTML entity equivalent value for string values&period;

The output of all expressions except for triple&hyphen;braced expressions are passed through this method&period; Helpers should also use this method when returning HTML content via a SafeString instance, to prevent possible code injection&period;

Helper values created by the SafeString function are left untouched by the template and are not passed through this function&period;

== Return Value

The escaped string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to escape&period;
|===

HTML escapes the specified string

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
HTMLEscape(
    link:#mrdocs-OutputRef[OutputRef]& out,
    std::string&lowbar;view str);
----

== Description

This function HTML escapes the specified string, making it safe for rendering as text within HTML content&period;

Replaces `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&apos;`, `, `&equals;&grave; with the HTML entity equivalent value for string values&period;

The output of all expressions except for triple&hyphen;braced expressions are passed through this method&period; Helpers should also use this method when returning HTML content via a SafeString instance, to prevent possible code injection&period;

Helper values created by the SafeString function are left untouched by the template and are not passed through this function&period;

This function has the same behavior as the corresponding utility function in the Handlebars&period;js library&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *out*
| The output stream reference where the escaped string will be written&period;
| *str*
| The string to escape&period;
|===

== See Also

https&colon;&sol;&sol;github&period;com&sol;handlebars&hyphen;lang&sol;handlebars&period;js&sol;blob&sol;master&sol;lib&sol;handlebars&sol;utils&period;js

Append a new function overload to the set&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
addMember(
    link:#mrdocs-OverloadsSymbol[OverloadsSymbol]& I,
    link:#mrdocs-FunctionSymbol[FunctionSymbol] const& Member);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Represents a set of function overloads&period;
| *Member*
| Metadata for a function or method&period;
|===

Add a $meta object with type information&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename IO&gt;
void
addMetaObject(IO& io);
----

== Description

Creates a $meta object containing&colon;

* type&colon; The unqualified C&plus;&plus; class name (e&period;g&period;, &quot;FunctionSymbol&quot;)&period;
* bases&colon; Array of base class names (e&period;g&period;, &lsqb;&quot;Symbol&quot;, &quot;SourceInfo&quot;&rsqb;)&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type whose metadata to add&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The lazy object IO to map into&period;
|===

`allMembers` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Enum&period;hpp&gt;`

Return the list of enum constants for this symbol&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto&
link:#mrdocs-allMembers-06[allMembers](link:#mrdocs-EnumSymbol[EnumSymbol] const& T);
----

[.small]#link:#mrdocs-allMembers-06[_» more&period;&period;&period;_]#

View all members of the namespace across tranches&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-allMembers-0c[allMembers](link:#mrdocs-NamespaceSymbol[NamespaceSymbol] const& T);
----

[.small]#link:#mrdocs-allMembers-0c[_» more&period;&period;&period;_]#

Join all tranche member lists into a single view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-allMembers-00[allMembers](link:#mrdocs-NamespaceTranche[NamespaceTranche] const& T);
----

[.small]#link:#mrdocs-allMembers-00[_» more&period;&period;&period;_]#

Access the list of overload members&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto&
link:#mrdocs-allMembers-04[allMembers](link:#mrdocs-OverloadsSymbol[OverloadsSymbol] const& T);
----

[.small]#link:#mrdocs-allMembers-04[_» more&period;&period;&period;_]#

Flatten all public&sol;protected&sol;private members&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-allMembers-0e2[allMembers](link:#mrdocs-RecordInterface[RecordInterface] const& T);
----

[.small]#link:#mrdocs-allMembers-0e2[_» more&period;&period;&period;_]#

View all record members across access levels&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-allMembers-0d[allMembers](link:#mrdocs-RecordSymbol[RecordSymbol] const& T);
----

[.small]#link:#mrdocs-allMembers-0d[_» more&period;&period;&period;_]#

Join every member list into a single view&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
link:#mrdocs-allMembers-0e7[allMembers](link:#mrdocs-RecordTranche[RecordTranche] const& T);
----

[.small]#link:#mrdocs-allMembers-0e7[_» more&period;&period;&period;_]#

Access declarations introduced by this using&hyphen;declaration&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto&
link:#mrdocs-allMembers-0f[allMembers](link:#mrdocs-UsingSymbol[UsingSymbol] const& T);
----

[.small]#link:#mrdocs-allMembers-0f[_» more&period;&period;&period;_]#

== Return Value

* Lazy view across every member bucket&period;
* Lazy view spanning every category stored in the tranche&period;
* Reference to the ID list backing this set&period;
* View concatenating the three access tranches&period;
* Lazy view traversing every tranche&period;
* Lazy view spanning all member categories&period;
* Reference to the underlying shadow list&period;

Return the list of enum constants for this symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Enum&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto&
allMembers(link:#mrdocs-EnumSymbol[EnumSymbol] const& T);
----

== Return Value

the list of enum constants for this symbol&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Metadata for an enumeration declaration&period;
|===

View all members of the namespace across tranches&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
allMembers(link:#mrdocs-NamespaceSymbol[NamespaceSymbol] const& T);
----

== Return Value

Lazy view across every member bucket&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Describes a namespace and its members&period;
|===

Join all tranche member lists into a single view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Namespace&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
allMembers(link:#mrdocs-NamespaceTranche[NamespaceTranche] const& T);
----

== Return Value

Lazy view spanning every category stored in the tranche&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Buckets the members that appear inside a namespace&period;
|===

Access the list of overload members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Overloads&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto&
allMembers(link:#mrdocs-OverloadsSymbol[OverloadsSymbol] const& T);
----

== Return Value

Reference to the ID list backing this set&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Represents a set of function overloads&period;
|===

Flatten all public&sol;protected&sol;private members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordInterface&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
allMembers(link:#mrdocs-RecordInterface[RecordInterface] const& T);
----

== Return Value

View concatenating the three access tranches&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The aggregated interface for a given struct, class, or union&period;
|===

View all record members across access levels&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
allMembers(link:#mrdocs-RecordSymbol[RecordSymbol] const& T);
----

== Return Value

Lazy view traversing every tranche&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Metadata for struct, class, or union&period;
|===

Join every member list into a single view&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordTranche&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto
allMembers(link:#mrdocs-RecordTranche[RecordTranche] const& T);
----

== Return Value

Lazy view spanning all member categories&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| A group of members that have the same access specifier&period;
|===

Access declarations introduced by this using&hyphen;declaration&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Using&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
auto&
allMembers(link:#mrdocs-UsingSymbol[UsingSymbol] const& T);
----

== Return Value

Reference to the underlying shadow list&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Info for using declarations&period;
|===

Handler invoked when `MRDOCS&lowbar;ASSERT` fails&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Assert&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
assert&lowbar;failed(
    char const* msg,
    char const* file,
    uint&lowbar;least32&lowbar;t line);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *msg*
| Expression string that failed&period;
| *file*
| Source file where the assertion triggered&period;
| *line*
| Line within the source file&period;
|===

Traverse a DocComment tree bottom&hyphen;up (post&hyphen;order)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mrdocs-DocCommentNodeTraversable[DocCommentNodeTraversable] T,
    class F&gt;
void
bottomUpTraverse(
    T& node,
    F&& func);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *node*
| Root node to traverse&period;
| *func*
| Visitor invoked after children are visited&period;
|===

Check whether two symbols may be merged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
canMerge(
    link:#mrdocs-Symbol[Symbol] const& I,
    link:#mrdocs-Symbol[Symbol] const& Other);
----

== Return Value

True when kinds and IDs match&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Base class with common properties of all symbols
| *Other*
| Base class with common properties of all symbols
|===

`cast` overloads

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Dynamic cast returning reference&semi; asserts on failure&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::remove&lowbar;reference&lowbar;t&lt;To&gt;&
link:#mrdocs-cast-0c[cast](link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;]& p);
----

[.small]#link:#mrdocs-cast-0c[_» more&period;&period;&period;_]#

Dynamic cast returning const reference&semi; asserts on failure&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&
link:#mrdocs-cast-0a[cast](link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const& p);
----

[.small]#link:#mrdocs-cast-0a[_» more&period;&period;&period;_]#

== Return Value

* Reference to the contained object cast to To&period;
* Const reference to the contained object cast to To&period;

Dynamic cast returning reference&semi; asserts on failure&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::remove&lowbar;reference&lowbar;t&lt;To&gt;&
cast(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;]& p);
----

== Return Value

Reference to the contained object cast to To&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *p*
| A polymorphic value&hyphen;type&period;
|===

Dynamic cast returning const reference&semi; asserts on failure&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&
cast(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const& p);
----

== Return Value

Const reference to the contained object cast to To&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *p*
| A polymorphic value&hyphen;type&period;
|===

`cast&lowbar;or&lowbar;null` overloads

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Dynamic cast pointer&semi; returns nullptr when pp is null&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt;&gt;
link:#mrdocs-cast_or_null-07[cast&lowbar;or&lowbar;null](link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;]* pp);
----

[.small]#link:#mrdocs-cast_or_null-07[_» more&period;&period;&period;_]#

Dynamic cast pointer&semi; returns nullptr when pp is null (const)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&gt;
link:#mrdocs-cast_or_null-0b[cast&lowbar;or&lowbar;null](link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const* pp);
----

[.small]#link:#mrdocs-cast_or_null-0b[_» more&period;&period;&period;_]#

== Return Value

Pointer to To when the cast succeeds, otherwise nullptr&period;

Dynamic cast pointer&semi; returns nullptr when pp is null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt;&gt;
cast&lowbar;or&lowbar;null(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;]* pp);
----

== Return Value

Pointer to To when the cast succeeds, otherwise nullptr&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pp*
| A polymorphic value&hyphen;type&period;
|===

Dynamic cast pointer&semi; returns nullptr when pp is null (const)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&gt;
cast&lowbar;or&lowbar;null(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const* pp);
----

== Return Value

Pointer to To when the cast succeeds, otherwise nullptr&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pp*
| A polymorphic value&hyphen;type&period;
|===

Return the result of comparing s0 to s1&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
compareSymbolNames(
    std::string&lowbar;view symbolName0,
    std::string&lowbar;view symbolName1) noexcept;
----

== Description

This function returns true if the string s0 is less than the string s1&period; The comparison is first made without regard to case, unless the strings compare equal and then they are compared with lowercase letters coming before uppercase letters&period;

== Return Value

The result of the comparison&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *symbolName0*
| The first symbol name to compare&period;
| *symbolName1*
| The second symbol name to compare&period;
|===

Determine if a range contains a specific element&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

Determine if a range contains a specific element&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class U&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;T, U&gt;
bool
link:#mrdocs-contains-0f[contains](
    std::initializer&lowbar;list&lt;T&gt; const& range,
    U const& el);
----

[.small]#link:#mrdocs-contains-0f[_» more&period;&period;&period;_]#

Determine if a range contains a specific element&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    class El&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;El, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
link:#mrdocs-contains-0c[contains](
    Range&& range,
    El const& el);
----

[.small]#link:#mrdocs-contains-0c[_» more&period;&period;&period;_]#

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *el*
| The element to search for&period;
|===

Determine if a range contains a specific element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class U&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;T, U&gt;
bool
contains(
    std::initializer&lowbar;list&lt;T&gt; const& range,
    U const& el);
----

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *el*
| The element to search for&period;
|===

Determine if a range contains a specific element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    class El&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;El, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
contains(
    Range&& range,
    El const& el);
----

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *el*
| The element to search for&period;
|===

Determine if a range contains any of the specified elements&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

Determine if a range contains any of the specified elements&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    std::ranges::range Els&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Els&gt;, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
link:#mrdocs-contains_any-06[contains&lowbar;any](
    Range const& range,
    Els const& els);
----

[.small]#link:#mrdocs-contains_any-06[_» more&period;&period;&period;_]#

Determine if a range contains any of the specified elements&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    class El&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;El, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
link:#mrdocs-contains_any-0a[contains&lowbar;any](
    Range const& range,
    std::initializer&lowbar;list&lt;El&gt; const& els);
----

[.small]#link:#mrdocs-contains_any-0a[_» more&period;&period;&period;_]#

== Return Value

True if any of the elements are found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *els*
| The elements to search for&period;
|===

Determine if a range contains any of the specified elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    std::ranges::range Els&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Els&gt;, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
contains&lowbar;any(
    Range const& range,
    Els const& els);
----

== Return Value

True if any of the elements are found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *els*
| The elements to search for&period;
|===

Determine if a range contains any of the specified elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    class El&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;El, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
contains&lowbar;any(
    Range const& range,
    std::initializer&lowbar;list&lt;El&gt; const& els);
----

== Return Value

True if any of the elements are found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *els*
| The elements to search for&period;
|===

Determine if a range contains at least N instances of the specified element&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    class El&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;El, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
contains&lowbar;n(
    Range const& range,
    El const& el,
    std::size&lowbar;t n);
----

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *el*
| The element to search for&period;
| *n*
| The number of instances to search for&period;
|===

Determine if a range contains at least N instances of any of the specified elements&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

Determine if a range contains at least N instances of any of the specified elements&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    std::ranges::range Els&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Els&gt;, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
link:#mrdocs-contains_n_any-01[contains&lowbar;n&lowbar;any](
    Range const& range,
    Els const& els,
    std::size&lowbar;t n);
----

[.small]#link:#mrdocs-contains_n_any-01[_» more&period;&period;&period;_]#

Determine if a range contains at least N instances of any of the specified elements&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    class El&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;El, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
link:#mrdocs-contains_n_any-0d[contains&lowbar;n&lowbar;any](
    Range const& range,
    std::initializer&lowbar;list&lt;El&gt; const& els,
    std::size&lowbar;t n);
----

[.small]#link:#mrdocs-contains_n_any-0d[_» more&period;&period;&period;_]#

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *els*
| The elements to search for&period;
| *n*
| The number of instances to search for&period;
|===

Determine if a range contains at least N instances of any of the specified elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    std::ranges::range Els&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Els&gt;, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
contains&lowbar;n&lowbar;any(
    Range const& range,
    Els const& els,
    std::size&lowbar;t n);
----

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *els*
| The elements to search for&period;
| *n*
| The number of instances to search for&period;
|===

Determine if a range contains at least N instances of any of the specified elements&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    class El&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;El, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
bool
contains&lowbar;n&lowbar;any(
    Range const& range,
    std::initializer&lowbar;list&lt;El&gt; const& els,
    std::size&lowbar;t n);
----

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *els*
| The elements to search for&period;
| *n*
| The number of instances to search for&period;
|===

Count the number of SymbolKind enumerators&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
consteval
std::underlying&lowbar;type&lowbar;t&lt;SymbolKind&gt;
countSymbolKind();
----

== Return Value

Number of `SymbolKind` values generated from SymbolNodes&period;inc&period;

Create child data objects&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

Create child data objects&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[dom::Object]
link:#mrdocs-createFrame-04[createFrame](link:#mrdocs-dom-Object[dom::Object] const& parent);
----

[.small]#link:#mrdocs-createFrame-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[dom::Object]
link:#mrdocs-createFrame-0b[createFrame](link:#mrdocs-dom-Value[dom::Value] const& parent);
----

[.small]#link:#mrdocs-createFrame-0b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[dom::Object]
link:#mrdocs-createFrame-0f[createFrame](
    link:#mrdocs-dom-Object[dom::Object] const& child,
    link:#mrdocs-dom-Object[dom::Object] const& parent);
----

[.small]#link:#mrdocs-createFrame-0f[_» more&period;&period;&period;_]#

== Return Value

The overlay object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *parent*
| The underlying frame object
|===

== See Also

https&colon;&sol;&sol;mustache&period;github&period;io&sol;mustache&period;5&period;html&num;Sections

Create child data objects&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[dom::Object]
createFrame(link:#mrdocs-dom-Object[dom::Object] const& parent);
----

== Description

This function can be used by block helpers to create child data objects&period;

The child data object is an overlay frame object implementation that will first look for a value in the child object and if not found will look in the parent object&period;

Helpers that modify the data state should create a new frame object when doing so, to isolate themselves and avoid corrupting the state of any parents&period;

Generally, only one frame needs to be created per helper execution&period; For example, the each iterator creates a single frame which is reused for all child execution&period;

== Return Value

The overlay object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *parent*
| The underlying frame object
|===

== See Also

https&colon;&sol;&sol;mustache&period;github&period;io&sol;mustache&period;5&period;html&num;Sections

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[dom::Object]
createFrame(link:#mrdocs-dom-Value[dom::Value] const& parent);
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Object[dom::Object]
createFrame(
    link:#mrdocs-dom-Object[dom::Object] const& child,
    link:#mrdocs-dom-Object[dom::Object] const& parent);
----

`dyn&lowbar;cast` overloads

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Dynamic cast returning pointer or nullptr&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt;&gt;
link:#mrdocs-dyn_cast-01[dyn&lowbar;cast](link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;]& p) noexcept;
----

[.small]#link:#mrdocs-dyn_cast-01[_» more&period;&period;&period;_]#

Dynamic cast returning pointer or nullptr (const overload)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&gt;
link:#mrdocs-dyn_cast-08[dyn&lowbar;cast](link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const& p) noexcept;
----

[.small]#link:#mrdocs-dyn_cast-08[_» more&period;&period;&period;_]#

== Return Value

Pointer to To if the dynamic cast succeeds, otherwise nullptr&period;

Dynamic cast returning pointer or nullptr&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt;&gt;
dyn&lowbar;cast(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;]& p) noexcept;
----

== Return Value

Pointer to To if the dynamic cast succeeds, otherwise nullptr&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *p*
| A polymorphic value&hyphen;type&period;
|===

Dynamic cast returning pointer or nullptr (const overload)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&gt;
dyn&lowbar;cast(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const& p) noexcept;
----

== Return Value

Pointer to To if the dynamic cast succeeds, otherwise nullptr&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *p*
| A polymorphic value&hyphen;type&period;
|===

`dyn&lowbar;cast&lowbar;or&lowbar;null` overloads

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

Dynamic cast if pointer is non&hyphen;null and engaged, else nullptr&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt;&gt;
link:#mrdocs-dyn_cast_or_null-0b[dyn&lowbar;cast&lowbar;or&lowbar;null](link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;]* pp) noexcept;
----

[.small]#link:#mrdocs-dyn_cast_or_null-0b[_» more&period;&period;&period;_]#

Dynamic cast if pointer is non&hyphen;null and engaged, else nullptr (const)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&gt;
link:#mrdocs-dyn_cast_or_null-04[dyn&lowbar;cast&lowbar;or&lowbar;null](link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const* pp) noexcept;
----

[.small]#link:#mrdocs-dyn_cast_or_null-04[_» more&period;&period;&period;_]#

== Return Value

Pointer to To when the cast succeeds, otherwise nullptr&period;

Dynamic cast if pointer is non&hyphen;null and engaged, else nullptr&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt;&gt;
dyn&lowbar;cast&lowbar;or&lowbar;null(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;]* pp) noexcept;
----

== Return Value

Pointer to To when the cast succeeds, otherwise nullptr&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pp*
| A polymorphic value&hyphen;type&period;
|===

Dynamic cast if pointer is non&hyphen;null and engaged, else nullptr (const)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::add&lowbar;pointer&lowbar;t&lt;std::remove&lowbar;reference&lowbar;t&lt;To&gt; const&gt;
dyn&lowbar;cast&lowbar;or&lowbar;null(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const* pp) noexcept;
----

== Return Value

Pointer to To when the cast succeeds, otherwise nullptr&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pp*
| A polymorphic value&hyphen;type&period;
|===

Determine if a string ends with one of the specified characters

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
endsWithOneOf(
    std::string&lowbar;view s,
    std::string&lowbar;view chars) noexcept;
----

== Return Value

if a string ends with one of the specified characters

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to check&period;
| *chars*
| The characters to check for&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
escapeExpression(
    link:#mrdocs-OutputRef[OutputRef] out,
    std::string&lowbar;view str,
    link:#mrdocs-HandlebarsOptions[HandlebarsOptions] const& opt);
----

Find a generator by its id&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Generator[Generator] const*
findGenerator(std::string&lowbar;view id) noexcept;
----

== Thread Safety

This function is thread&hyphen;safe and may be called concurrently from multiple threads&period;

== Return Value

A pointer to the generator, or `nullptr` if no generator with the given id exists&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *id*
| The symbolic name of the generator&period; The name must be an exact match, including case&period;
|===

Find the last element in a range that matches an element in the specified range&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::ranges::range Range,
    std::ranges::range Els&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Els&gt;, std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;
auto
find&lowbar;last&lowbar;of(
    Range&& range,
    Els&& els);
----

== Return Value

An iterator to the last element found, or std&colon;&colon;ranges&colon;&colon;end(range) if not found&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *range*
| The range to search&period;
| *els*
| The elements to search for&period;
|===

`forEachFile` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

Call a function for each file in a directory&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-forEachFile-03[forEachFile](
    std::string&lowbar;view dirPath,
    bool recursive,
    link:#mrdocs-AnyFileVisitor[AnyFileVisitor]& visitor);
----

[.small]#link:#mrdocs-forEachFile-03[_» more&period;&period;&period;_]#

Visit each file in a directory&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Visitor&gt;
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
link:#mrdocs-forEachFile-09[forEachFile](
    std::string&lowbar;view dirPath,
    bool recursive,
    Visitor&& visitor);
----

[.small]#link:#mrdocs-forEachFile-09[_» more&period;&period;&period;_]#

== Return Value

An error if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dirPath*
| The path to the directory&period;
| *recursive*
| If true, files in subdirectories are also visited, recursively&period;
| *visitor*
| The visitor to invoke for each file&period;
|===

Call a function for each file in a directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
forEachFile(
    std::string&lowbar;view dirPath,
    bool recursive,
    link:#mrdocs-AnyFileVisitor[AnyFileVisitor]& visitor);
----

== Description

This will iterate all the regular files in a directory and invoke the visitor with the path&period;

== Return Value

An error if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dirPath*
| The path to the directory&period;
| *recursive*
| If true, files in subdirectories are also visited, recursively&period;
| *visitor*
| The visitor to invoke for each file&period;
|===

Visit each file in a directory&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Path&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Visitor&gt;
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
forEachFile(
    std::string&lowbar;view dirPath,
    bool recursive,
    Visitor&& visitor);
----

== Return Value

An error if any occurred&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dirPath*
| The path to the directory&period;
| *recursive*
| If true, files in subdirectories are also visited, recursively&period;
| *visitor*
| A callable object which is invoked for each file&period; This visitor might return `void` or `Expected&lt;void&gt;`&period;
|===

Return a formatted error&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Args&gt;
link:#mrdocs-Error[Error]
formatError(
    link:#mrdocs-FormatString[FormatString&lt;Args&period;&period;&period;&gt;] fs,
    Args&&&period;&period;&period; args);
----

== Return Value

a formatted error&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *fs*
| The format string&period; This must not be empty&period;
| *args*
| Zero or more values to substitute into the format string&period;
|===

Convert a string to a FundamentalTypeKind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
fromString(
    std::string&lowbar;view str,
    link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind]& kind) noexcept;
----

== Description

This function converts a string to a FundamentalTypeKind&period;

All variations of the type specifiers are supported&period;

However, the &quot;long long&quot; specifier cannot be split into two separate specifiers&period;

== Return Value

true if the string was successfully converted

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to convert
| *kind* [out]
| The resulting FundamentalTypeKind
|===

Return the default accessibility for a record key kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
getDefaultAccessString(link:#mrdocs-RecordKeyKind[RecordKeyKind] const& kind) noexcept;
----

== Return Value

the default accessibility for a record key kind&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The kind of record&colon; struct, class, or union&period;
|===

Return the short name of an operator as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OperatorKind[OperatorKind]
getOperatorKind(std::string&lowbar;view name) noexcept;
----

== Return Value

The OperatorKind, or OperatorKind&colon;&colon;None if not recognized&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *name*
| The operator name, e&period;g&period; `operator&plus;`, `operator&plus;&plus;`, `operator&lsqb;&rsqb;`, etc&period;
|===

Return the short name of an operator as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OperatorKind[OperatorKind]
getOperatorKindFromSuffix(std::string&lowbar;view suffix) noexcept;
----

== Return Value

The OperatorKind, or OperatorKind&colon;&colon;None if not recognized&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *suffix*
| The operator suffix, e&period;g&period; `&plus;`, `&plus;&plus;`, `&lsqb;&rsqb;`, etc&period;
|===

Return the name of an operator as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
getOperatorName(
    link:#mrdocs-OperatorKind[OperatorKind] kind,
    bool include&lowbar;keyword = false) noexcept;
----

== Return Value

the name of an operator as a string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The kind of operator&period;
| *include&lowbar;keyword*
| Whether the name should be prefixed with the `operator` keyword&period;
|===

Return the human&hyphen;readable name of the operator

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;std::string&lowbar;view&gt;]
getOperatorReadableName(
    link:#mrdocs-OperatorKind[OperatorKind] kind,
    int nParams);
----

== Return Value

The readable name, or nullopt if the operator is not recognized&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The kind of operator&period;
| *nParams*
| The number of parameters the operator takes&period;
|===

`getParents` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

Return a list of the parent symbols of the specified Symbol&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt;
link:#mrdocs-getParents-04[getParents](
    link:#mrdocs-Corpus[Corpus] const& C,
    link:#mrdocs-Symbol[Symbol] const& I);
----

[.small]#link:#mrdocs-getParents-04[_» more&period;&period;&period;_]#

Return a list of the parent symbols of the specified Info&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[dom::Array]
link:#mrdocs-getParents-06[getParents](
    link:#mrdocs-DomCorpus[DomCorpus] const& C,
    link:#mrdocs-Symbol[Symbol] const& I);
----

[.small]#link:#mrdocs-getParents-06[_» more&period;&period;&period;_]#

Return a list of the parent symbols of the specified Symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Corpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::vector&lt;SymbolID&gt;
getParents(
    link:#mrdocs-Corpus[Corpus] const& C,
    link:#mrdocs-Symbol[Symbol] const& I);
----

== Return Value

a list of the parent symbols of the specified Symbol&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *C*
| The collection of declarations in extracted form&period;
| *I*
| Base class with common properties of all symbols
|===

Return a list of the parent symbols of the specified Info&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DomCorpus&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Array[dom::Array]
getParents(
    link:#mrdocs-DomCorpus[DomCorpus] const& C,
    link:#mrdocs-Symbol[Symbol] const& I);
----

== Return Value

a list of the parent symbols of the specified Info&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *C*
| Front&hyphen;end factory for producing Dom nodes&period;
| *I*
| Base class with common properties of all symbols
|===

`getPrimaryLocation` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

Determine a location to use when none is explicitly chosen&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Location&gt;]
link:#mrdocs-getPrimaryLocation-0a[getPrimaryLocation](link:#mrdocs-Symbol[Symbol] const& I);
----

[.small]#link:#mrdocs-getPrimaryLocation-0a[_» more&period;&period;&period;_]#

Choose the best location to display for a symbol&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Location&gt;]
link:#mrdocs-getPrimaryLocation-0f[getPrimaryLocation](
    link:#mrdocs-SourceInfo[SourceInfo] const& I,
    bool preferDefinition);
----

[.small]#link:#mrdocs-getPrimaryLocation-0f[_» more&period;&period;&period;_]#

== Return Value

The preferred location if available&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Source info to examine&period;
| *preferDefinition*
| If true, favor a definition location&period;
|===

Determine a location to use when none is explicitly chosen&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Location&gt;]
getPrimaryLocation(link:#mrdocs-Symbol[Symbol] const& I);
----

== Return Value

a location to use when none is explicitly chosen&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Base class with common properties of all symbols
|===

Choose the best location to display for a symbol&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Location&gt;]
getPrimaryLocation(
    link:#mrdocs-SourceInfo[SourceInfo] const& I,
    bool preferDefinition);
----

== Return Value

The preferred location if available&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Source info to examine&period;
| *preferDefinition*
| If true, favor a definition location&period;
|===

Return the safe name of an operator as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
getSafeOperatorName(
    link:#mrdocs-OperatorKind[OperatorKind] kind,
    bool include&lowbar;keyword = false) noexcept;
----

== Return Value

the safe name of an operator as a string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The kind of operator&period;
| *include&lowbar;keyword*
| Whether the name should be prefixed with `operator&lowbar;`&period;
|===

Return the short name of an operator as a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
getShortOperatorName(link:#mrdocs-OperatorKind[OperatorKind] kind) noexcept;
----

== Return Value

the short name of an operator as a string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Operator kinds
|===

Return the full path for single page output&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;std::string&gt;]
getSinglePageFullPath(
    std::string&lowbar;view outputPath,
    std::string&lowbar;view extension);
----

== Description

This function determines the full path for a single&hyphen;page output file based on the provided `outputPath` and file `extension`&period;

If the `outputPath` already exists&colon;

* If it is a directory, appends the default file name with the provided extension&period;
* If it is a file, uses the provided `outputPath` directly&period;

If the `outputPath` does not exist&colon;

* If it ends with a &apos;&sol;&apos;, assumes it is a directory and appends the default file name&period;
* Otherwise, it returns an error because the path is ambiguous&period;

== Return Value

The full path or an error if the `outputPath` is ambiguous&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *outputPath*
| The specified output path, which can be a directory or file&period;
| *extension*
| The file extension to use for single&hyphen;page output&period;
|===

Return the inner type&period;

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

Return the inner type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Type&gt;&&gt;]
link:#mrdocs-innerType-09[innerType](link:#mrdocs-Type[Type]& TI) noexcept;
----

[.small]#link:#mrdocs-innerType-09[_» more&period;&period;&period;_]#

Return the inner type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Type&gt; const&&gt;]
link:#mrdocs-innerType-06[innerType](link:#mrdocs-Type[Type] const& TI) noexcept;
----

[.small]#link:#mrdocs-innerType-06[_» more&period;&period;&period;_]#

Return the inner type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Type&gt;&&gt;]
innerType(link:#mrdocs-Type[Type]& TI) noexcept;
----

== Description

The inner type is the type that is modified by a specifier (e&period;g&period; &quot;int&quot; in &quot;pointer to int&quot;)&period;

== Return Value

the inner type&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *TI*
| A possibly qualified type&period;
|===

Return the inner type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Type&gt; const&&gt;]
innerType(link:#mrdocs-Type[Type] const& TI) noexcept;
----

== Description

The inner type is the type that is modified by a specifier (e&period;g&period; &quot;int&quot; in &quot;pointer to int&quot;)&period;

== Return Value

the inner type&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *TI*
| A possibly qualified type&period;
|===

Return the inner type&period;

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

Return the inner type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Type[Type]*
link:#mrdocs-innerTypePtr-08[innerTypePtr](link:#mrdocs-Type[Type]& TI) noexcept;
----

[.small]#link:#mrdocs-innerTypePtr-08[_» more&period;&period;&period;_]#

Return the inner type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Type[Type] const*
link:#mrdocs-innerTypePtr-0a[innerTypePtr](link:#mrdocs-Type[Type] const& TI) noexcept;
----

[.small]#link:#mrdocs-innerTypePtr-0a[_» more&period;&period;&period;_]#

Return the inner type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Type[Type]*
innerTypePtr(link:#mrdocs-Type[Type]& TI) noexcept;
----

== Description

The inner type is the type that is modified by a specifier (e&period;g&period; &quot;int&quot; in &quot;pointer to int&quot;)&period;

== Return Value

the inner type&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *TI*
| A possibly qualified type&period;
|===

Return the inner type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Type[Type] const*
innerTypePtr(link:#mrdocs-Type[Type] const& TI) noexcept;
----

== Description

The inner type is the type that is modified by a specifier (e&period;g&period; &quot;int&quot; in &quot;pointer to int&quot;)&period;

== Return Value

the inner type&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *TI*
| A possibly qualified type&period;
|===

`innermostType` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

Return the innermost type (mutable overload)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;]&
link:#mrdocs-innermostType-09[innermostType](link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;]& TI) noexcept;
----

[.small]#link:#mrdocs-innermostType-09[_» more&period;&period;&period;_]#

Return the innermost type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const&
link:#mrdocs-innermostType-0b[innermostType](link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& TI) noexcept;
----

[.small]#link:#mrdocs-innermostType-0b[_» more&period;&period;&period;_]#

Return the innermost type (mutable overload)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;]&
innermostType(link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;]& TI) noexcept;
----

== Return Value

the innermost type (mutable overload)&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *TI*
| A polymorphic value&hyphen;type&period;
|===

Return the innermost type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const&
innermostType(link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& TI) noexcept;
----

== Description

The innermost type is the type which is not modified by any specifiers (e&period;g&period; &quot;int&quot; in &quot;pointer to const int&quot;)&period;

If the type has an inner type, we recursively call this function until we reach the innermost type&period; If the type has no inner type, we return the current type&period;

== Return Value

the innermost type&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *TI*
| A polymorphic value&hyphen;type&period;
|===

Install a custom generator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Generator&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-Expected-0a[Expected&lt;void&gt;]
installGenerator(std::unique&lowbar;ptr&lt;Generator&gt; G);
----

== Description

This function registers a generator with the global generator registry, making it available for use&period;

Plugins can use this function to register custom generators&period;

== Thread Safety

This function is thread&hyphen;safe and may be called concurrently from multiple threads&period;

== Return Value

An error if a generator with the same id already exists&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *G*
| The generator to install&period; Ownership is transferred to the registry&period;
|===

`isAlphaNumeric` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Determine if a character is ASCII alphanumeric&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isAlphaNumeric-09[isAlphaNumeric](char const c) noexcept;
----

[.small]#link:#mrdocs-isAlphaNumeric-09[_» more&period;&period;&period;_]#

Determine if every character in a string is ASCII alphanumeric&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isAlphaNumeric-01[isAlphaNumeric](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-isAlphaNumeric-01[_» more&period;&period;&period;_]#

== Return Value

* `true` if `c` is an ASCII letter or digit&period;
* `true` if all characters are ASCII letters or digits&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
| *s*
| String to inspect&period;
|===

Determine if a character is ASCII alphanumeric&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isAlphaNumeric(char const c) noexcept;
----

== Return Value

`true` if `c` is an ASCII letter or digit&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
|===

Determine if every character in a string is ASCII alphanumeric&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isAlphaNumeric(std::string&lowbar;view const s) noexcept;
----

== Return Value

`true` if all characters are ASCII letters or digits&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| String to inspect&period;
|===

`isAlphabetic` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Determine if a character is an ASCII letter&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isAlphabetic-061[isAlphabetic](char const c) noexcept;
----

[.small]#link:#mrdocs-isAlphabetic-061[_» more&period;&period;&period;_]#

Determine if every character in a string is an ASCII letter&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isAlphabetic-067[isAlphabetic](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-isAlphabetic-067[_» more&period;&period;&period;_]#

== Return Value

* `true` if `c` is in the ranges &apos;a&apos;&hyphen;&apos;z&apos; or &apos;A&apos;&hyphen;&apos;Z&apos;&period;
* `true` if all characters are alphabetic&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
| *s*
| String to inspect&period;
|===

Determine if a character is an ASCII letter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isAlphabetic(char const c) noexcept;
----

== Return Value

`true` if `c` is in the ranges &apos;a&apos;&hyphen;&apos;z&apos; or &apos;A&apos;&hyphen;&apos;Z&apos;&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
|===

Determine if every character in a string is an ASCII letter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isAlphabetic(std::string&lowbar;view const s) noexcept;
----

== Return Value

`true` if all characters are alphabetic&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| String to inspect&period;
|===

Determines whether the operator is potentially binary&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isBinaryOperator(link:#mrdocs-OperatorKind[OperatorKind] kind) noexcept;
----

== Return Value

whether the operator is potentially binary&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Operator kinds
|===

Check whether a function is a copy assignment operator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isCopyAssignment(link:#mrdocs-FunctionSymbol[FunctionSymbol] const& func);
----

== Description

A copy assignment operator is a non&hyphen;template operator&equals; whose parameter is of type X, X&amp;, const X&amp;, volatile X&amp;, or const volatile X&amp; (&lsqb;class&period;copy&period;assign&rsqb;)&period;

== Return Value

Whether `func` is a copy assignment operator&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *func*
| The function to check&period;
|===

Check whether a function is a copy constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isCopyConstructor(link:#mrdocs-FunctionSymbol[FunctionSymbol] const& func);
----

== Description

A copy constructor is a non&hyphen;template constructor whose first parameter is an lvalue reference to the possibly cv&hyphen;qualified record type, with all remaining parameters having defaults (&lsqb;class&period;copy&period;ctor&rsqb;)&period;

== Return Value

Whether `func` is a copy constructor&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *func*
| The function to check&period;
|===

Check whether a function is a default constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isDefaultConstructor(link:#mrdocs-FunctionSymbol[FunctionSymbol] const& func);
----

== Description

A default constructor is a constructor for which each parameter that is not a function parameter pack has a default argument (including the case of a constructor with no parameters) (&lsqb;class&period;default&period;ctor&rsqb;)&period;

== Return Value

Whether `func` is a default constructor&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *func*
| The function to check&period;
|===

`isDigit` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Determine if a character is an ASCII digit&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isDigit-02[isDigit](char const c) noexcept;
----

[.small]#link:#mrdocs-isDigit-02[_» more&period;&period;&period;_]#

Determine if every character in a string is an ASCII digit&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isDigit-06[isDigit](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-isDigit-06[_» more&period;&period;&period;_]#

== Return Value

* `true` if `c` is between &apos;0&apos; and &apos;9&apos;&period;
* `true` if all characters are digits&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
| *s*
| String to inspect&period;
|===

Determine if a character is an ASCII digit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isDigit(char const c) noexcept;
----

== Return Value

`true` if `c` is between &apos;0&apos; and &apos;9&apos;&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
|===

Determine if every character in a string is an ASCII digit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isDigit(std::string&lowbar;view const s) noexcept;
----

== Return Value

`true` if all characters are digits&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| String to inspect&period;
|===

Determine if a value is empty

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isEmpty(link:#mrdocs-dom-Value[dom::Value] const& arg);
----

== Description

This is used by the built&hyphen;in if and with helpers to control their execution flow&period;

The Handlebars definition of empty is any of&colon;

* Array with length 0
* falsy values other than 0

This is intended to match the Mustache Behaviour&period;

== Return Value

True if the value is empty, false otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arg*
| The value to test
|===

== See Also

https&colon;&sol;&sol;mustache&period;github&period;io&sol;mustache&period;5&period;html&num;Sections

`isLowerCase` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Determine if a character is a lowercase ASCII letter&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isLowerCase-02[isLowerCase](char const c) noexcept;
----

[.small]#link:#mrdocs-isLowerCase-02[_» more&period;&period;&period;_]#

Determine if every character in a string is lowercase ASCII&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isLowerCase-0d[isLowerCase](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-isLowerCase-0d[_» more&period;&period;&period;_]#

== Return Value

* `true` if `c` is in the range &apos;a&apos; to &apos;z&apos;&period;
* `true` if all characters are lowercase ASCII letters&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
| *s*
| String to inspect&period;
|===

Determine if a character is a lowercase ASCII letter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isLowerCase(char const c) noexcept;
----

== Return Value

`true` if `c` is in the range &apos;a&apos; to &apos;z&apos;&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
|===

Determine if every character in a string is lowercase ASCII&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isLowerCase(std::string&lowbar;view const s) noexcept;
----

== Return Value

`true` if all characters are lowercase ASCII letters&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| String to inspect&period;
|===

Check whether a function is a move assignment operator&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isMoveAssignment(link:#mrdocs-FunctionSymbol[FunctionSymbol] const& func);
----

== Description

A move assignment operator is a non&hyphen;template operator&equals; whose parameter is an rvalue reference to the possibly cv&hyphen;qualified record type (&lsqb;class&period;copy&period;assign&rsqb;)&period;

== Return Value

Whether `func` is a move assignment operator&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *func*
| The function to check&period;
|===

Check whether a function is a move constructor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isMoveConstructor(link:#mrdocs-FunctionSymbol[FunctionSymbol] const& func);
----

== Description

A move constructor is a non&hyphen;template constructor whose first parameter is an rvalue reference to the possibly cv&hyphen;qualified record type, with all remaining parameters having defaults (&lsqb;class&period;copy&period;ctor&rsqb;)&period;

== Return Value

Whether `func` is a move constructor&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *func*
| The function to check&period;
|===

Check whether a function is a special member function&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isSpecialMemberFunction(link:#mrdocs-FunctionSymbol[FunctionSymbol] const& func);
----

== Description

A special member function is a default constructor, copy&sol;move constructor, copy&sol;move assignment operator, or destructor (&lsqb;special&rsqb;)&period;

== Return Value

Whether `func` is a special member function&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *func*
| The function to check&period;
|===

Determines whether the operator is potentially unary&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
isUnaryOperator(link:#mrdocs-OperatorKind[OperatorKind] kind) noexcept;
----

== Return Value

whether the operator is potentially unary&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Operator kinds
|===

`isUpperCase` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Determine if a character is an uppercase ASCII letter&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isUpperCase-02[isUpperCase](char const c) noexcept;
----

[.small]#link:#mrdocs-isUpperCase-02[_» more&period;&period;&period;_]#

Determine if every character in a string is uppercase ASCII&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isUpperCase-0e[isUpperCase](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-isUpperCase-0e[_» more&period;&period;&period;_]#

== Return Value

* `true` if `c` is in the range &apos;A&apos; to &apos;Z&apos;&period;
* `true` if all characters are uppercase ASCII letters&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
| *s*
| String to inspect&period;
|===

Determine if a character is an uppercase ASCII letter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isUpperCase(char const c) noexcept;
----

== Return Value

`true` if `c` is in the range &apos;A&apos; to &apos;Z&apos;&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
|===

Determine if every character in a string is uppercase ASCII&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isUpperCase(std::string&lowbar;view const s) noexcept;
----

== Return Value

`true` if all characters are uppercase ASCII letters&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| String to inspect&period;
|===

`isWhitespace` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Determine if a character is whitespace&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isWhitespace-01[isWhitespace](char c) noexcept;
----

[.small]#link:#mrdocs-isWhitespace-01[_» more&period;&period;&period;_]#

Determine if a string is only whitespace&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-isWhitespace-02[isWhitespace](std::string&lowbar;view s) noexcept;
----

[.small]#link:#mrdocs-isWhitespace-02[_» more&period;&period;&period;_]#

== Return Value

* `true` if `c` is a horizontal or vertical whitespace character&period;
* true if the string is empty or contains only whitespace characters (space, tab, newline, vertical tab, form feed, carriage return)&period; false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
| *s*
| The string to check&period;
|===

Determine if a character is whitespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isWhitespace(char c) noexcept;
----

== Return Value

`true` if `c` is a horizontal or vertical whitespace character&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to inspect&period;
|===

Determine if a string is only whitespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
isWhitespace(std::string&lowbar;view s) noexcept;
----

== Return Value

true if the string is empty or contains only whitespace characters (space, tab, newline, vertical tab, form feed, carriage return)&period; false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to check&period;
|===

is&lowbar;null helper that uses nullable&lowbar;traits&lt;T&gt; if available&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-has_nullable_traits_v[has&lowbar;nullable&lowbar;traits&lowbar;v] T&gt;
bool
is&lowbar;null(T const& v) noexcept(noexcept(nullable&lowbar;traits&lt;T&gt;&colon;&colon;is&lowbar;null(v)));
----

== Return Value

true if v is null, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The value to test for null&period;
|===

Determine if an element is equal to any of the elements in the specified range&period;

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

Determine if an element is equal to any of the elements in the specified range&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class El,
    std::ranges::range Range&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;, El&gt;
bool
link:#mrdocs-is_one_of-05[is&lowbar;one&lowbar;of](
    El const& el,
    Range const& range);
----

[.small]#link:#mrdocs-is_one_of-05[_» more&period;&period;&period;_]#

Determine if an element is equal to any of the elements in the specified range&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class T&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;U, T&gt;
bool
link:#mrdocs-is_one_of-04[is&lowbar;one&lowbar;of](
    U const& el,
    std::initializer&lowbar;list&lt;T&gt; const& range);
----

[.small]#link:#mrdocs-is_one_of-04[_» more&period;&period;&period;_]#

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The element to search for&period;
| *range*
| The range to search&period;
|===

Determine if an element is equal to any of the elements in the specified range&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class El,
    std::ranges::range Range&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;, El&gt;
bool
is&lowbar;one&lowbar;of(
    El const& el,
    Range const& range);
----

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The element to search for&period;
| *range*
| The range to search&period;
|===

Determine if an element is equal to any of the elements in the specified range&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Algorithm&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class U,
    class T&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;U, T&gt;
bool
is&lowbar;one&lowbar;of(
    U const& el,
    std::initializer&lowbar;list&lt;T&gt; const& range);
----

== Return Value

True if the element is found, false otherwise&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *el*
| The element to search for&period;
| *range*
| The range to search&period;
|===

Return true if the polymorphic object holds a value of type To&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
bool
isa(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const& p) noexcept;
----

== Return Value

true if the polymorphic object holds a value of type To&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *p*
| A polymorphic value&hyphen;type&period;
|===

Return true if pointer is non&hyphen;null and referent is of type To&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class To,
    class From&gt;
requires ( std&colon;&colon;derived&lowbar;from&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;To&gt;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;From&gt;&gt; )
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
bool
isa&lowbar;or&lowbar;null(link:#mrdocs-Polymorphic[Polymorphic&lt;From&gt;] const* pp) noexcept;
----

== Return Value

true if pointer is non&hyphen;null and referent is of type To&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *pp*
| A polymorphic value&hyphen;type&period;
|===

Compare ExtractionModes and returns the least specific

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;ExtractionMode&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ExtractionMode[ExtractionMode]
leastSpecific(
    link:#mrdocs-ExtractionMode[ExtractionMode] const a,
    link:#mrdocs-ExtractionMode[ExtractionMode] const b) noexcept;
----

== Description

This function returns the least specific of the two ExtractionModes in terms of the number of filters passed&period;

If the symbol passes the filter that categorizes it as `a`, then it also passes the filter that categorizes it as `b` (or vice&hyphen;versa), then this function will return the final category for the symbol&period;

== Return Value

Determine why a symbol is extracted

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| Determine why a symbol is extracted
| *b*
| Determine why a symbol is extracted
|===

`ltrim` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Return the substring without leading horizontal whitespace&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
link:#mrdocs-ltrim-05d[ltrim](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-ltrim-05d[_» more&period;&period;&period;_]#

Return the substring without leading specified characters&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
link:#mrdocs-ltrim-0e[ltrim](
    std::string&lowbar;view const s,
    std::string&lowbar;view const chars) noexcept;
----

[.small]#link:#mrdocs-ltrim-0e[_» more&period;&period;&period;_]#

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
| *chars*
| The characters to remove&period;
|===

Return the substring without leading horizontal whitespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
ltrim(std::string&lowbar;view const s) noexcept;
----

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
|===

Return the substring without leading specified characters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
ltrim(
    std::string&lowbar;view const s,
    std::string&lowbar;view const chars) noexcept;
----

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
| *chars*
| The characters to remove&period;
|===

Apply the &quot;char&quot; specifier to the type

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
makeChar(link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind]& kind) noexcept;
----

== Description

If applying the &quot;char&quot; specifier to a type that might have been declared only with &quot;signed&sol;unsigned&quot; or &quot;short&sol;long&quot; specifiers, the function changes the type and returns true&period;

For instance, applying &quot;char&quot; to `FundamentalTypeKind&colon;&colon;Int` (&quot;int&quot;, which could be declared as &quot;signed&quot;) results in `FundamentalTypeKind&colon;&colon;SignedChar` (&quot;signed char&quot;)&period;

== Return Value

Whether the operation was successful

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind* [in]
| The type to modify
|===

Apply the &quot;long&quot; specifier to the type

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
makeLong(link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind]& kind) noexcept;
----

== Description

If applying &quot;long&quot; the specifier is a valid operation the function changes the type and returns true&period;

For instance, applying &quot;long&quot; to `FundamentalTypeKind&colon;&colon;Int` (&quot;int&quot;) results in `FundamentalTypeKind&colon;&colon;Long` (&quot;long int&quot;)&period;

== Return Value

Whether the operation was successful

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind* [in]
| The type to modify
|===

Factory function that creates an Overload from the given callables&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mrdocs-Overload-09[Overload&lt;std::decay&lowbar;t&lt;Ts&gt;&period;&period;&period;&gt;]
makeOverload(Ts&&&period;&period;&period; xs) noexcept((std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;std&colon;&colon;decay&lowbar;t&lt;Ts&gt;, Ts &amp;&amp;&gt; &amp;&amp; &period;&period;&period;));
----

== Description

Prefer this over constructing Overload directly when you need perfect forwarding and decayed storage&period;

[,cpp]
----
auto visitor = fn::makeOverload(
     [](int) { return 1; },
     [](double) { return 2; }
);
----
== Return Value

An Overload whose base classes are the decayed types of the provided callables&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *xs*
| The callables to combine&period;
|===

Apply the &quot;short&quot; specifier to the type

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
makeShort(link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind]& kind) noexcept;
----

== Description

If applying &quot;short&quot; the specifier is a valid operation the function changes the type and returns true&period;

For instance, applying &quot;short&quot; to `FundamentalTypeKind&colon;&colon;Int` (&quot;int&quot;) results in `FundamentalTypeKind&colon;&colon;Short` (&quot;short int&quot;)&period;

== Return Value

Whether the operation was successful

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind* [in]
| The type to modify
|===

Apply the &quot;signed&quot; specifier to the type

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
makeSigned(link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind]& kind) noexcept;
----

== Description

If applying the &quot;signed&quot; specifier is a valid operation the function changes the type and returns true&period;

For instance, applying &quot;signed&quot; to `FundamentalTypeKind&colon;&colon;Char` (&quot;char&quot;) results in `FundamentalTypeKind&colon;&colon;SignedChar` (&quot;signed char&quot;)&period;

It also returns true if applying the &quot;signed&quot; specifier is a valid operation but doesn&apos;t affect the type&period;

For instance, applying &quot;signed&quot; to `FundamentalTypeKind&colon;&colon;Int` (&quot;int&quot;) doesn&apos;t change the type but returns `true`, even though `FundamentalTypeKind&colon;&colon;Int` could be declared as &quot;int&quot; or &quot;signed&quot; and multiple &quot;signed&quot; specifiers are not allowed&period;

== Return Value

Whether the operation was successful

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind* [in]
| The type to modify
|===

Apply the &quot;unsigned&quot; specifier to the type

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
makeUnsigned(link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind]& kind) noexcept;
----

== Description

If applying the &quot;unsigned&quot; specifier is a valid operation the function changes the type and returns true&period;

For instance, applying &quot;unsigned&quot; to `FundamentalTypeKind&colon;&colon;Char` (&quot;char&quot;) results in `FundamentalTypeKind&colon;&colon;UnsignedChar` (&quot;unsigned char&quot;) and applying &quot;unsigned&quot; to `FundamentalTypeKind&colon;&colon;Int` (&quot;int&quot;) results in `FundamentalTypeKind&colon;&colon;UnsignedInt` (&quot;unsigned int&quot;)&period;

== Return Value

Whether the operation was successful

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind* [in]
| The type to modify
|===

Make a visitor for a base type

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Visitor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename BaseTy,
    typename ObjectTy,
    typename FnTy,
    typename&period;&period;&period; ArgsTy&gt;
auto
makeVisitor(
    ObjectTy&& obj,
    FnTy&& fn,
    ArgsTy&&&period;&period;&period; args);
----

== Description

The returned visitor is an object with a template method `visit` which can be called with a derived type of the object being visited&period;

The visitor stores the arguments `args` passed to this function, and its method `visit` calls the function `fn` with the derived type as the first argument, followed by `args`&period;

== Return Value

The common return type of `fn` when called with a derived type of `obj` and `args`

== Parameters

[cols="1,4"]
|===
|Name|Description

| *obj*
| The object to visit
| *fn*
| The function object to call
| *args*
| The arguments to pass to the function object
|===

`make&lowbar;array&lowbar;view` overloads

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

Create an ArrayView from a C&hyphen;style array&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    std::size&lowbar;t N&gt;
constexpr
link:#mrdocs-ArrayView-06[ArrayView&lt;T&gt;]
link:#mrdocs-make_array_view-09[make&lowbar;array&lowbar;view](T const(& arr)[N]) noexcept;
----

[.small]#link:#mrdocs-make_array_view-09[_» more&period;&period;&period;_]#

Create an ArrayView from a pointer and count&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
constexpr
link:#mrdocs-ArrayView-06[ArrayView&lt;T&gt;]
link:#mrdocs-make_array_view-0b[make&lowbar;array&lowbar;view](
    T const* data,
    std::size&lowbar;t count) noexcept;
----

[.small]#link:#mrdocs-make_array_view-0b[_» more&period;&period;&period;_]#

== Return Value

* View over the provided array&period;
* View over the provided range&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| Array to view&period;
| *data*
| Pointer to the first element&period;
| *count*
| Number of elements&period;
|===

Create an ArrayView from a C&hyphen;style array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    std::size&lowbar;t N&gt;
constexpr
link:#mrdocs-ArrayView-06[ArrayView&lt;T&gt;]
make&lowbar;array&lowbar;view(T const(& arr)[N]) noexcept;
----

== Return Value

View over the provided array&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arr*
| Array to view&period;
|===

Create an ArrayView from a pointer and count&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
constexpr
link:#mrdocs-ArrayView-06[ArrayView&lt;T&gt;]
make&lowbar;array&lowbar;view(
    T const* data,
    std::size&lowbar;t count) noexcept;
----

== Return Value

View over the provided range&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *data*
| Pointer to the first element&period;
| *count*
| Number of elements&period;
|===

make&lowbar;null helper that uses nullable&lowbar;traits&lt;T&gt; if available&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-has_nullable_traits_v[has&lowbar;nullable&lowbar;traits&lowbar;v] T&gt;
void
make&lowbar;null(T& v) noexcept(noexcept(nullable&lowbar;traits&lt;T&gt;&colon;&colon;make&lowbar;null(v)));
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The value to make null&period;
|===

`mapReflectedType` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

Map all described members without converting values&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    bool isMostDerived,
    typename IO,
    typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
link:#mrdocs-mapReflectedType-09[mapReflectedType](
    IO& io,
    T const& obj);
----

[.small]#link:#mrdocs-mapReflectedType-09[_» more&period;&period;&period;_]#

Automatically map all described members of a type to the DOM&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    bool isMostDerived,
    typename IO,
    typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
link:#mrdocs-mapReflectedType-05[mapReflectedType](
    IO& io,
    T const& obj,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-mapReflectedType-05[_» more&period;&period;&period;_]#

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *isMostDerived*
| Whether this is the most&hyphen;derived type (adds $meta if true)&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to use for mapping&period;
| *obj*
| The object to be mapped&period;
| *domCorpus*
| The DomCorpus used to create the DOM values, or a null pointer&period;
|===

Map all described members without converting values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    bool isMostDerived,
    typename IO,
    typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
mapReflectedType(
    IO& io,
    T const& obj);
----

== Description

This version passes raw member values to `io&period;map()`, letting the IO object handle conversion with its stored context&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *isMostDerived*
| Whether this is the most&hyphen;derived type (adds $meta if true)&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to use for mapping&period;
| *obj*
| The object to be mapped&period;
|===

Automatically map all described members of a type to the DOM&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    bool isMostDerived,
    typename IO,
    typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
mapReflectedType(
    IO& io,
    T const& obj,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *isMostDerived*
| Whether this is the most&hyphen;derived type&period; When true, adds the $meta object&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to use for mapping&period;
| *obj*
| The object to be mapped&period;
| *domCorpus*
| The DomCorpus used to create the DOM values, or a null pointer&period;
|===

Applies a set of callables to a std&colon;&colon;variant using std&colon;&colon;visit and Overload&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class Variant,
    class&period;&period;&period; Ts&gt;
constexpr
decltype(auto)
match(
    Variant&& v,
    Ts&&&period;&period;&period; xs);
----

== Description

This is a convenience wrapper around std&colon;&colon;visit(makeOverload(&period;&period;&period;), variant)&period; It forwards the variant and the callables and returns whatever std&colon;&colon;visit returns&period;

[,cpp]
----
std::variant<int, std::string> v = 42;
auto r = fn::match(v,
    [](int i) { return i + 1; },
    [](const std::string& s) { return s.size(); }
);
----
== Return Value

The result of std&colon;&colon;visit&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The variant to visit (can be lvalue or rvalue&semi; const&hyphen;qualification is preserved)&period;
| *xs*
| The callables to be combined with makeOverload and passed to std&colon;&colon;visit&period;
|===

`merge` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

Append blocks from `other` into `I`, preserving order&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-merge-0b[merge](
    link:#mrdocs-DocComment[DocComment]& I,
    link:#mrdocs-DocComment[DocComment]&& other);
----

[.small]#link:#mrdocs-merge-0b[_» more&period;&period;&period;_]#

Merge metadata from another expression&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-merge-05[merge](
    link:#mrdocs-ExprInfo[ExprInfo]& I,
    link:#mrdocs-ExprInfo[ExprInfo]&& Other);
----

[.small]#link:#mrdocs-merge-05[_» more&period;&period;&period;_]#

Merge two ExtractionMode values&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-merge-0dd8[merge](
    link:#mrdocs-ExtractionMode[ExtractionMode]& dst,
    link:#mrdocs-ExtractionMode[ExtractionMode]&& src) noexcept;
----

[.small]#link:#mrdocs-merge-0dd8[_» more&period;&period;&period;_]#

Merge the location sets, preferring existing def&sol;primary&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-merge-0dd1[merge](
    link:#mrdocs-SourceInfo[SourceInfo]& I,
    link:#mrdocs-SourceInfo[SourceInfo] const& Other);
----

[.small]#link:#mrdocs-merge-0dd1[_» more&period;&period;&period;_]#

Merge, transferring ownership from the right&hyphen;hand side&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-merge-0c[merge](
    link:#mrdocs-SourceInfo[SourceInfo]& I,
    link:#mrdocs-SourceInfo[SourceInfo]&& Other);
----

[.small]#link:#mrdocs-merge-0c[_» more&period;&period;&period;_]#

Merge partial template info, filling missing pieces&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-merge-08[merge](
    link:#mrdocs-TemplateInfo[TemplateInfo]& I,
    link:#mrdocs-TemplateInfo[TemplateInfo]&& Other);
----

[.small]#link:#mrdocs-merge-08[_» more&period;&period;&period;_]#

Merge friend declarations, deduplicating by symbol ID&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-merge-06[merge](
    std::vector&lt;FriendInfo&gt;& dst,
    std::vector&lt;FriendInfo&gt;&& src);
----

[.small]#link:#mrdocs-merge-06[_» more&period;&period;&period;_]#

Merge parameters element&hyphen;wise, appending extras from `src`&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-merge-03[merge](
    std::vector&lt;Param&gt;& dst,
    std::vector&lt;Param&gt;&& src);
----

[.small]#link:#mrdocs-merge-03[_» more&period;&period;&period;_]#

Merges two Symbol objects according to the behavior of the derived class&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-polymorphic_storage_for[polymorphic&lowbar;storage&lowbar;for&lt;Symbol&gt;] SymbolTy&gt;
void
link:#mrdocs-merge-0e[merge](
    SymbolTy& I,
    SymbolTy&& Other);
----

[.small]#link:#mrdocs-merge-0e[_» more&period;&period;&period;_]#

Generic merge for any described type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
link:#mrdocs-merge-0da[merge](
    T& dst,
    T&& src);
----

[.small]#link:#mrdocs-merge-0da[_» more&period;&period;&period;_]#

Merge metadata from another constant expression&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
static
void
link:#mrdocs-merge-07[merge](
    link:#mrdocs-ConstantExprInfo[ConstantExprInfo&lt;T&gt;]& I,
    link:#mrdocs-ConstantExprInfo[ConstantExprInfo&lt;T&gt;]&& Other);
----

[.small]#link:#mrdocs-merge-07[_» more&period;&period;&period;_]#

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type to merge (must have MRDOCS&lowbar;DESCRIBE&lowbar;STRUCT)&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dst*
| The destination&period;
| *src*
| The source (moved from)&period;
| *I*
| The Symbol object to merge into&period;
| *Other*
| The Symbol object to merge from&period;
|===

Append blocks from `other` into `I`, preserving order&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
merge(
    link:#mrdocs-DocComment[DocComment]& I,
    link:#mrdocs-DocComment[DocComment]&& other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| A processed documentation comment attached to a declaration&period;
| *other*
| A processed documentation comment attached to a declaration&period;
|===

Merge metadata from another expression&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
merge(
    link:#mrdocs-ExprInfo[ExprInfo]& I,
    link:#mrdocs-ExprInfo[ExprInfo]&& Other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Represents an expression
| *Other*
| Represents an expression
|===

Merge two ExtractionMode values&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;ExtractionMode&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
merge(
    link:#mrdocs-ExtractionMode[ExtractionMode]& dst,
    link:#mrdocs-ExtractionMode[ExtractionMode]&& src) noexcept;
----

== Description

Takes the least specific (most conservative) of the two, so that a symbol demoted in any TU stays demoted&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dst*
| Determine why a symbol is extracted
| *src*
| Determine why a symbol is extracted
|===

Merge the location sets, preferring existing def&sol;primary&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
merge(
    link:#mrdocs-SourceInfo[SourceInfo]& I,
    link:#mrdocs-SourceInfo[SourceInfo] const& Other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Stores source information for a declaration&period;
| *Other*
| Stores source information for a declaration&period;
|===

Merge, transferring ownership from the right&hyphen;hand side&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
merge(
    link:#mrdocs-SourceInfo[SourceInfo]& I,
    link:#mrdocs-SourceInfo[SourceInfo]&& Other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Stores source information for a declaration&period;
| *Other*
| Stores source information for a declaration&period;
|===

Merge partial template info, filling missing pieces&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
merge(
    link:#mrdocs-TemplateInfo[TemplateInfo]& I,
    link:#mrdocs-TemplateInfo[TemplateInfo]&& Other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Information about templates and specializations thereof&period;
| *Other*
| Information about templates and specializations thereof&period;
|===

Merge friend declarations, deduplicating by symbol ID&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Friend&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
merge(
    std::vector&lt;FriendInfo&gt;& dst,
    std::vector&lt;FriendInfo&gt;&& src);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dst*
| The destination&period;
| *src*
| The source (moved from)&period;
|===

Merge parameters element&hyphen;wise, appending extras from `src`&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
merge(
    std::vector&lt;Param&gt;& dst,
    std::vector&lt;Param&gt;&& src);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dst*
| The destination&period;
| *src*
| The source (moved from)&period;
|===

Merges two Symbol objects according to the behavior of the derived class&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-polymorphic_storage_for[polymorphic&lowbar;storage&lowbar;for&lt;Symbol&gt;] SymbolTy&gt;
void
merge(
    SymbolTy& I,
    SymbolTy&& Other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| The Symbol object to merge into&period;
| *Other*
| The Symbol object to merge from&period;
|===

Generic merge for any described type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MergeReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
merge(
    T& dst,
    T&& src);
----

== Description

Found via ADL for any type with MRDOCS&lowbar;DESCRIBE&lowbar;STRUCT&period; Non&hyphen;template overloads (custom merge functions) are preferred by overload resolution, so types with special merge semantics are unaffected&period;

Iterates base classes (via `describe&lowbar;bases`) and own members (via `describe&lowbar;members`)&period;

Base classes are merged first by calling &grave;merge(base&lowbar;dst, base&lowbar;src)&grave;, which must be found via ADL&period;

For each own member, a default merge strategy is applied based on the member type (see `mergeByType` for the full list of strategies)&period;

== Template Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| The type to merge (must have MRDOCS&lowbar;DESCRIBE&lowbar;STRUCT)&period;
|===

== Parameters

[cols="1,4"]
|===
|Name|Description

| *dst*
| The destination object&period;
| *src*
| The source object&period; Members are moved from individually&period;
|===

Merge metadata from another constant expression&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
static
void
merge(
    link:#mrdocs-ConstantExprInfo[ConstantExprInfo&lt;T&gt;]& I,
    link:#mrdocs-ConstantExprInfo[ConstantExprInfo&lt;T&gt;]&& Other);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *I*
| Represents an expression with a (possibly known) value
| *Other*
| Represents an expression with a (possibly known) value
|===

Compare ExtractionModes and returns the most specific

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;ExtractionMode&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mrdocs-ExtractionMode[ExtractionMode]
mostSpecific(
    link:#mrdocs-ExtractionMode[ExtractionMode] const a,
    link:#mrdocs-ExtractionMode[ExtractionMode] const b) noexcept;
----

== Description

This function returns the most specific of the two ExtractionModes in terms of number of filters passed&period;

== Return Value

Determine why a symbol is extracted

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| Determine why a symbol is extracted
| *b*
| Determine why a symbol is extracted
|===

null&lowbar;of helper that constructs a null T using nullable&lowbar;traits&lt;T&gt;&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-has_nullable_traits_v[has&lowbar;nullable&lowbar;traits&lowbar;v] T&gt;
T
null&lowbar;of() noexcept(noexcept(nullable&lowbar;traits&lt;T&gt;&colon;&colon;null()));
----

== Return Value

A null T value&period;

Pipe a contiguous character range into the adaptor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
operator&verbar;(
    R&& r,
    &sol;&ast; implementation-defined &ast;&sol; const& a);
----

== Return Value

View over the lines in `r&period;`

== Parameters

[cols="1,4"]
|===
|Name|Description

| *r*
| Range to split&period;
| *a*
| SplitLines adaptor instance&period;
|===

Determine if one function would override the other

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
overrides(
    link:#mrdocs-FunctionSymbol[FunctionSymbol] const& base,
    link:#mrdocs-FunctionSymbol[FunctionSymbol] const& derived);
----

== Return Value

if one function would override the other

== Parameters

[cols="1,4"]
|===
|Name|Description

| *base*
| The base function
| *derived*
| The derived function
|===

Parse a string view

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

Parse a string view


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-HasParse[HasParse] T&gt;
link:#mrdocs-Expected-0a[Expected&lt;T&gt;]
link:#mrdocs-parse-01[parse](std::string&lowbar;view sv);
----

[.small]#link:#mrdocs-parse-01[_» more&period;&period;&period;_]#

Parse a string view


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-HasParse[HasParse] T&gt;
link:#mrdocs-ParseResult[ParseResult]
link:#mrdocs-parse-0a[parse](
    std::string&lowbar;view sv,
    T& value);
----

[.small]#link:#mrdocs-parse-0a[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| The string view to parse
| *value*
| The value to store the result
|===

Parse a string view

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-HasParse[HasParse] T&gt;
link:#mrdocs-Expected-0a[Expected&lt;T&gt;]
parse(std::string&lowbar;view sv);
----

== Description

Parse a string view `sv` as an object of type `T`&period; If parsing fails, the function returns an error&period;

This overload does not return the `ParseResult` object containing the pointer to the first character not parsed&period; Instead, the position of the error is calculated and the error message is formatted with the error position&period;

This function parses a string view `sv` into a value of type `T`&period; The function calls the `parse` function for the type `T` with the `sv&period;data()` and `sv&period;data() &plus; sv&period;size()` as the first and last pointers, respectively&period;

If the parse function returns an error, then the function returns the error&period;

If the parse function returns success, but there are characters left in the string view, then the function returns an error with the message &quot;trailing characters&quot;&period;

Otherwise, it returns the value&period;

== Return Value

A container holding an error or a value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| The string view to parse
|===

Parse a string view

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mrdocs-HasParse[HasParse] T&gt;
link:#mrdocs-ParseResult[ParseResult]
parse(
    std::string&lowbar;view sv,
    T& value);
----

== Description

This function parses a string view `sv` into a value of type `T`&period; The function calls the `parse` function for the type `T` with the `sv&period;data()` and `sv&period;data() &plus; sv&period;size()` as the first and last pointers, respectively&period;

If the parse function returns an error, then the function returns the error&period;

If the parse function returns success, but there are characters left in the string view, then the function returns an error with the message &quot;trailing characters&quot;&period;

Otherwise, it returns the value&period;

== Return Value

The result of a parse operation&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| The string view to parse
| *value*
| The value to store the result
|===

Get the unqualified name of a type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
constexpr
std::string&lowbar;view
readableTypeName();
----

== Description

Extracts the name from *PRETTY&lowbar;FUNCTION* (Clang&sol;GCC) or *FUNCSIG* (MSVC)&period;

E&period;g&period;&colon; readableTypeName&lt;mrdocs&colon;&colon;FunctionSymbol&gt;() &hyphen;&gt; &quot;FunctionSymbol&quot;&period;

== Return Value

the unqualified name of a type&period;

Reindent code by removing the common leading spaces and adding the specified indent&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
reindentCode(
    std::string&lowbar;view code,
    std::size&lowbar;t indent = 0);
----

== Return Value

The modified code block&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *code*
| The code block to unindent&period;
| *indent*
| The number of spaces to insert in front of each line after trimming&period;
|===

Return the substring without leading and trailing horizontal whitespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
replace(
    std::string& s,
    std::string&lowbar;view from,
    std::string&lowbar;view to);
----

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
| *from*
| The substring to remove&period;
| *to*
| The substring to replace with&period; If this is empty, the substring is removed&period;
|===

`rtrim` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Return the substring without trailing horizontal whitespace&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
link:#mrdocs-rtrim-0e[rtrim](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-rtrim-0e[_» more&period;&period;&period;_]#

Return the substring without trailing specified characters&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
link:#mrdocs-rtrim-08[rtrim](
    std::string&lowbar;view const s,
    std::string&lowbar;view const chars) noexcept;
----

[.small]#link:#mrdocs-rtrim-08[_» more&period;&period;&period;_]#

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
| *chars*
| The characters to remove&period;
|===

Return the substring without trailing horizontal whitespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
rtrim(std::string&lowbar;view const s) noexcept;
----

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
|===

Return the substring without trailing specified characters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
rtrim(
    std::string&lowbar;view const s,
    std::string&lowbar;view const chars) noexcept;
----

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
| *chars*
| The characters to remove&period;
|===

`safeString` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

Create a wrapper for a safe string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-safeString-0e[safeString](std::string&lowbar;view str);
----

[.small]#link:#mrdocs-safeString-0e[_» more&period;&period;&period;_]#

Mark an existing string&hyphen;like value as safe to emit without escaping&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-safeString-0b[safeString](link:#mrdocs-dom-Value[dom::Value] const& str);
----

[.small]#link:#mrdocs-safeString-0b[_» more&period;&period;&period;_]#

Return a DOM string ensuring special characters are escaped&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;std::string&lowbar;view&gt; SV&gt;
link:#mrdocs-dom-Value[dom::Value]
link:#mrdocs-safeString-04[safeString](SV const& str);
----

[.small]#link:#mrdocs-safeString-04[_» more&period;&period;&period;_]#

== Return Value

* The safe string wrapper
* dom&colon;&colon;Value containing the safe string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to mark as safe
|===

== See Also

https&colon;&sol;&sol;handlebarsjs&period;com&sol;api&hyphen;reference&sol;utilities&period;html&num;handlebars&hyphen;safestring&hyphen;string

Create a wrapper for a safe string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
safeString(std::string&lowbar;view str);
----

== Description

This string wrapper prevents the string from being escaped when the template is rendered&period;

When a helper returns a safe string, it will be marked as safe and will not be escaped when rendered&period; The string will be rendered as if converted to a `dom&colon;&colon;Value` and rendered as&hyphen;is&period;

When constructing the string that will be marked as safe, any external content should be properly escaped using the `escapeExpression` function to avoid potential security concerns&period;

== Return Value

The safe string wrapper

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| The string to mark as safe
|===

== See Also

https&colon;&sol;&sol;handlebarsjs&period;com&sol;api&hyphen;reference&sol;utilities&period;html&num;handlebars&hyphen;safestring&hyphen;string

Mark an existing string&hyphen;like value as safe to emit without escaping&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-Value[dom::Value]
safeString(link:#mrdocs-dom-Value[dom::Value] const& str);
----

== Description

This overload is useful when a helper already produced a `dom&colon;&colon;Value` and only needs to flip the safe&hyphen;string flag before it is rendered&period;

== Return Value

A variant container for any kind of Dom value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| A variant container for any kind of Dom value&period;
|===

Return a DOM string ensuring special characters are escaped&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Dom&sol;Value&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;std::string&lowbar;view&gt; SV&gt;
link:#mrdocs-dom-Value[dom::Value]
safeString(SV const& str);
----

== Return Value

dom&colon;&colon;Value containing the safe string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *str*
| Source string view convertible type&period;
|===

`splitLines` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

Split a string view into lines&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-splitLines-0a[splitLines](std::string&lowbar;view sv);
----

[.small]#link:#mrdocs-splitLines-0a[_» more&period;&period;&period;_]#

Split any contiguous character range into lines&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::ranges::contiguous&lowbar;range R&gt;
requires std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;remove&lowbar;cv&lowbar;t&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;R&gt;&gt;, char&gt;
constexpr
auto
link:#mrdocs-splitLines-0d[splitLines](R&& r);
----

[.small]#link:#mrdocs-splitLines-0d[_» more&period;&period;&period;_]#

== Return Value

* View over the lines in `sv&period;`
* View over the lines in the range&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| Source string&period;
| *r*
| Range of characters&period;
|===

Split a string view into lines&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
splitLines(std::string&lowbar;view sv);
----

== Return Value

View over the lines in `sv&period;`

== Parameters

[cols="1,4"]
|===
|Name|Description

| *sv*
| Source string&period;
|===

Split any contiguous character range into lines&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::ranges::contiguous&lowbar;range R&gt;
requires std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;remove&lowbar;cv&lowbar;t&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;R&gt;&gt;, char&gt;
constexpr
auto
splitLines(R&& r);
----

== Return Value

View over the lines in the range&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *r*
| Range of characters&period;
|===

Determine if a string starts with one of the specified characters

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
startsWithOneOf(
    std::string&lowbar;view s,
    std::string&lowbar;view chars) noexcept;
----

== Return Value

if a string starts with one of the specified characters

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to check&period;
| *chars*
| The characters to check for&period;
|===

`swap` overloads

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-swap-0e[swap](
    link:#mrdocs-Error[Error]& lhs,
    link:#mrdocs-Error[Error]& rhs) noexcept;
----

[.small]#link:#mrdocs-swap-0e[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-swap-07c9[swap](
    link:#mrdocs-Expected-01[Expected]& a,
    link:#mrdocs-Expected-01[Expected]& b) noexcept(noexcept(a&period;swap(b)))
requires requires &lcub; a&period;swap(b)&semi; &rcub;;
----

[.small]#link:#mrdocs-swap-07c9[_» more&period;&period;&period;_]#

Swap contents with another Expected&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-swap-03[swap](
    link:#mrdocs-Expected-0a[Expected]& x,
    link:#mrdocs-Expected-0a[Expected]& y) noexcept(noexcept(x&period;swap(y)))
requires requires &lcub;x&period;swap(y)&semi;&rcub;;
----

[.small]#link:#mrdocs-swap-03[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-swap-07ce[swap](
    link:#mrdocs-Polymorphic[Polymorphic]& lhs,
    link:#mrdocs-Polymorphic[Polymorphic]& rhs) noexcept;
----

[.small]#link:#mrdocs-swap-07ce[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
link:#mrdocs-swap-02[swap](
    link:#mrdocs-Unexpected-0c[Unexpected]& x,
    link:#mrdocs-Unexpected-0c[Unexpected]& y) noexcept(noexcept(x&period;swap(y)))
requires std&colon;&colon;is&lowbar;swappable&lowbar;v&lt;E&gt;;
----

[.small]#link:#mrdocs-swap-02[_» more&period;&period;&period;_]#

Swap two Optional references&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
constexpr
void
link:#mrdocs-swap-0b[swap](
    link:#mrdocs-Optional-03[Optional&lt;T&&gt;]& a,
    link:#mrdocs-Optional-03[Optional&lt;T&&gt;]& b) noexcept;
----

[.small]#link:#mrdocs-swap-0b[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| First optional reference&period;
| *b*
| Second optional reference&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Error&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(
    link:#mrdocs-Error[Error]& lhs,
    link:#mrdocs-Error[Error]& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(
    link:#mrdocs-Expected-01[Expected]& a,
    link:#mrdocs-Expected-01[Expected]& b) noexcept(noexcept(a&period;swap(b)))
requires requires &lcub; a&period;swap(b)&semi; &rcub;;
----

Swap contents with another Expected&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(
    link:#mrdocs-Expected-0a[Expected]& x,
    link:#mrdocs-Expected-0a[Expected]& y) noexcept(noexcept(x&period;swap(y)))
requires requires &lcub;x&period;swap(y)&semi;&rcub;;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| A container holding an error or a value&period;
| *y*
| A container holding an error or a value&period;
|===

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(
    link:#mrdocs-Polymorphic[Polymorphic]& lhs,
    link:#mrdocs-Polymorphic[Polymorphic]& rhs) noexcept;
----

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(
    link:#mrdocs-Unexpected-0c[Unexpected]& x,
    link:#mrdocs-Unexpected-0c[Unexpected]& y) noexcept(noexcept(x&period;swap(y)))
requires std&colon;&colon;is&lowbar;swappable&lowbar;v&lt;E&gt;;
----

Swap two Optional references&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
constexpr
void
swap(
    link:#mrdocs-Optional-03[Optional&lt;T&&gt;]& a,
    link:#mrdocs-Optional-03[Optional&lt;T&&gt;]& b) noexcept;
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| First optional reference&period;
| *b*
| Second optional reference&period;
|===

`tag&lowbar;invoke` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

Serialize the auto kind into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-06f[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-AutoKind[AutoKind] kind);
----

[.small]#link:#mrdocs-tag_invoke-06f[_» more&period;&period;&period;_]#

Serialize a FundamentalTypeKind into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-012[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind] kind);
----

[.small]#link:#mrdocs-tag_invoke-012[_» more&period;&period;&period;_]#

Map an operator kind to a DOM value (its underlying integer)&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0c9[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-OperatorKind[OperatorKind] kind);
----

[.small]#link:#mrdocs-tag_invoke-0c9[_» more&period;&period;&period;_]#

Map a QualifierKind into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0f77[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-QualifierKind[QualifierKind] kind);
----

[.small]#link:#mrdocs-tag_invoke-0f77[_» more&period;&period;&period;_]#

Return the ReferenceKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0b[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ReferenceKind[ReferenceKind] kind);
----

[.small]#link:#mrdocs-tag_invoke-0b[_» more&period;&period;&period;_]#

Map a TypeKind into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-08d[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-TypeKind[TypeKind] kind);
----

[.small]#link:#mrdocs-tag_invoke-08d[_» more&period;&period;&period;_]#

Return the UsingClass as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-026[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-UsingClass[UsingClass] kind);
----

[.small]#link:#mrdocs-tag_invoke-026[_» more&period;&period;&period;_]#

Return the AccessKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-037[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-AccessKind[AccessKind] const kind);
----

[.small]#link:#mrdocs-tag_invoke-037[_» more&period;&period;&period;_]#

Return the ConstexprKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-06e[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ConstexprKind[ConstexprKind] const kind);
----

[.small]#link:#mrdocs-tag_invoke-06e[_» more&period;&period;&period;_]#

Return the StorageClassKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0d2[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-StorageClassKind[StorageClassKind] const kind);
----

[.small]#link:#mrdocs-tag_invoke-0d2[_» more&period;&period;&period;_]#

Return the ExplicitInfo as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0cb[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ExplicitInfo[ExplicitInfo] const& I);
----

[.small]#link:#mrdocs-tag_invoke-0cb[_» more&period;&period;&period;_]#

Serialize source locations into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-086[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-SourceInfo[SourceInfo] const& I);
----

[.small]#link:#mrdocs-tag_invoke-086[_» more&period;&period;&period;_]#

Convert SymbolID to dom&colon;&colon;Value string in the DOM using toBase16


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0f1[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-SymbolID[SymbolID] const& id);
----

[.small]#link:#mrdocs-tag_invoke-0f1[_» more&period;&period;&period;_]#

Convert a NoexceptInfo to a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-004[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag] tag,
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-NoexceptInfo[NoexceptInfo] const& info);
----

[.small]#link:#mrdocs-tag_invoke-004[_» more&period;&period;&period;_]#

Map the SourceInfo to a lazy DOM object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
link:#mrdocs-tag_invoke-035[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO&,
    link:#mrdocs-SourceInfo[SourceInfo] const&);
----

[.small]#link:#mrdocs-tag_invoke-035[_» more&period;&period;&period;_]#

Generic ValueFrom for any described enum&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Enum&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;enumerators&lt;Enum&gt;&colon;&colon;value
void
link:#mrdocs-tag_invoke-076[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    Enum e);
----

[.small]#link:#mrdocs-tag_invoke-076[_» more&period;&period;&period;_]#

Generic tag&lowbar;invoke for described types without context&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename IO,
    typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
link:#mrdocs-tag_invoke-057[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    T const& I);
----

[.small]#link:#mrdocs-tag_invoke-057[_» more&period;&period;&period;_]#

Map an ExprInfo to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-09b5[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ExprInfo[ExprInfo] const& expr,
    link:#mrdocs-DomCorpus[DomCorpus] const*);
----

[.small]#link:#mrdocs-tag_invoke-09b5[_» more&period;&period;&period;_]#

Serialize a base description into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-087[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-BaseInfo[BaseInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-087[_» more&period;&period;&period;_]#

Map an ExprInfo to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0f6[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ExprInfo[ExprInfo] const& expr,
    link:#mrdocs-DomCorpus[DomCorpus] const*);
----

[.small]#link:#mrdocs-tag_invoke-0f6[_» more&period;&period;&period;_]#

Serialize a name into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-079[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Name[Name] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-079[_» more&period;&period;&period;_]#

Return the Param as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0945[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Param[Param] const& p,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-0945[_» more&period;&period;&period;_]#

Convert SymbolID to dom&colon;&colon;Value object in the DOM using Corpus


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-055[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-SymbolID[SymbolID] const& id,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-055[_» more&period;&period;&period;_]#

Serialize the argument to a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-090[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-TArg[TArg] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-090[_» more&period;&period;&period;_]#

Serialize a template parameter into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-091[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-TParam[TParam] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-091[_» more&period;&period;&period;_]#

Serialize template info into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-05b[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-TemplateInfo[TemplateInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-05b[_» more&period;&period;&period;_]#

Serialize a Type into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-00c[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Type[Type] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-00c[_» more&period;&period;&period;_]#

Convert an optional SymbolID to dom&colon;&colon;Value or null&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0e4[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;SymbolID&gt;] const& id,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-0e4[_» more&period;&period;&period;_]#

Serialize an optional template info into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-09b7[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;TemplateInfo&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-09b7[_» more&period;&period;&period;_]#

Serialize an optional polymorphic name into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-02c[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Name&gt;&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-02c[_» more&period;&period;&period;_]#

Serialize an optional polymorphic type into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-03a[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Type&gt;&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-03a[_» more&period;&period;&period;_]#

Serialize a polymorphic name into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-030[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-030[_» more&period;&period;&period;_]#

Serialize a polymorphic template argument into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-011[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-011[_» more&period;&period;&period;_]#

Serialize a polymorphic template parameter&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0f7d[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-0f7d[_» more&period;&period;&period;_]#

Serialize a polymorphic type into a DOM value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0a[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-0a[_» more&period;&period;&period;_]#

Convert SymbolID pointers to dom&colon;&colon;Value or null&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-05c[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    std::unique&lowbar;ptr&lt;SymbolID&gt; const& t,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-05c[_» more&period;&period;&period;_]#

Map a vector of parameters to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
link:#mrdocs-tag_invoke-0e8[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    std::vector&lt;Param&gt; const& params,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-0e8[_» more&period;&period;&period;_]#

Map an ArrayType to a dom&colon;&colon;Object with split bounds properties&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename IO&gt;
void
link:#mrdocs-tag_invoke-0fa[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-ArrayType[ArrayType] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-0fa[_» more&period;&period;&period;_]#

Map a BaseInfo to a dom&colon;&colon;Object with computed access booleans&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
link:#mrdocs-tag_invoke-05a[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-BaseInfo[BaseInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-05a[_» more&period;&period;&period;_]#

Map a FriendInfo to a dom&colon;&colon;Object with deferred name lookup&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename IO&gt;
void
link:#mrdocs-tag_invoke-013[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-FriendInfo[FriendInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-013[_» more&period;&period;&period;_]#

Map a Name to a dom&colon;&colon;Object via visit&hyphen;based polymorphic dispatch&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
link:#mrdocs-tag_invoke-056[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-Name[Name] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-056[_» more&period;&period;&period;_]#

Map a RecordSymbol to a dom&colon;&colon;Object with computed defaultAccess&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename IO&gt;
void
link:#mrdocs-tag_invoke-0db[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-RecordSymbol[RecordSymbol] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-0db[_» more&period;&period;&period;_]#

Map a Symbol to a dom&colon;&colon;Object with computed extraction properties&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename IO&gt;
void
link:#mrdocs-tag_invoke-088[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-Symbol[Symbol] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-088[_» more&period;&period;&period;_]#

Map a TemplateInfo to a dom&colon;&colon;Object with computed specialization kind&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
link:#mrdocs-tag_invoke-04[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-TemplateInfo[TemplateInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-04[_» more&period;&period;&period;_]#

Generic ValueFrom for any described compound type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires (describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value &amp;&amp;
              !describe&colon;&colon;has&lowbar;describe&lowbar;enumerators&lt;T&gt;&colon;&colon;value)
void
link:#mrdocs-tag_invoke-094c[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    T const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-094c[_» more&period;&period;&period;_]#

Map the Polymorphic Symbol to a link:#mrdocs-dom-Object[`dom&colon;&colon;Object`]&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class IO,
    link:#mrdocs-polymorphic_storage_for[polymorphic&lowbar;storage&lowbar;for&lt;Symbol&gt;] PolymorphicSymbol&gt;
requires std&colon;&colon;derived&lowbar;from&lt;PolymorphicSymbol, Symbol&gt;
void
link:#mrdocs-tag_invoke-033[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    PolymorphicSymbol const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-033[_» more&period;&period;&period;_]#

Generic tag&lowbar;invoke for any described type with DomCorpus context&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename IO,
    typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
link:#mrdocs-tag_invoke-036[tag&lowbar;invoke](
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    T const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

[.small]#link:#mrdocs-tag_invoke-036[_» more&period;&period;&period;_]#

Generic ValueFrom for described enums, with context&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Enum,
    typename Context&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;enumerators&lt;Enum&gt;&colon;&colon;value
void
link:#mrdocs-tag_invoke-0da[tag&lowbar;invoke](
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    Enum e,
    Context const&);
----

[.small]#link:#mrdocs-tag_invoke-0da[_» more&period;&period;&period;_]#

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output value&period;
| *kind*
| The UsingClass to convert&period;
| *I*
| The ExplicitInfo to convert&period;
| *e*
| The enumerator to convert to a dom&colon;&colon;Value string&period;
| *io*
| The lazy object builder to map fields into&period;
| *expr*
| The expression info to convert&period;
| *t*
| The SymbolID pointer to convert&period; If null, the dom&colon;&colon;Value is set to null&period;
| *domCorpus*
| The DomCorpus to use, or nullptr&period; If null, the SymbolID is converted to a base16 string&period;
| *params*
| The list of parameters to convert&period;
|===

Serialize the auto kind into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;AutoKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-AutoKind[AutoKind] kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| The kind of `auto` keyword used in a declaration&period;
|===

Serialize a FundamentalTypeKind into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind] kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Categorically describes a fundamental type&period;
|===

Map an operator kind to a DOM value (its underlying integer)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;OperatorKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-OperatorKind[OperatorKind] kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Operator kinds
|===

Map a QualifierKind into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;QualifierKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-QualifierKind[QualifierKind] kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Type qualifiers
|===

Return the ReferenceKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ReferenceKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ReferenceKind[ReferenceKind] kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Reference type kinds
|===

Map a TypeKind into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-TypeKind[TypeKind] kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Variants of C&plus;&plus; types captured in metadata&period;
|===

Return the UsingClass as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Using&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-UsingClass[UsingClass] kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output value&period;
| *kind*
| The UsingClass to convert&period;
|===

Return the AccessKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;AccessKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-AccessKind[AccessKind] const kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Access specifier&period;
|===

Return the ConstexprKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ConstexprKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ConstexprKind[ConstexprKind] const kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| `constexpr`&sol;`consteval` specifier kinds
|===

Return the StorageClassKind as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;StorageClassKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-StorageClassKind[StorageClassKind] const kind);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *kind*
| Storage class kinds
|===

Return the ExplicitInfo as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ExplicitInfo[ExplicitInfo] const& I);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output parameter to receive the dom&colon;&colon;Value&period;
| *I*
| The ExplicitInfo to convert&period;
|===

Serialize source locations into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-SourceInfo[SourceInfo] const& I);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| Stores source information for a declaration&period;
|===

Convert SymbolID to dom&colon;&colon;Value string in the DOM using toBase16

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-SymbolID[SymbolID] const& id);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *id*
| A unique identifier for a symbol&period;
|===

Convert a NoexceptInfo to a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag] tag,
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-NoexceptInfo[NoexceptInfo] const& info);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *tag*
| Customization point tag&period;
| *v*
| A variant container for any kind of Dom value&period;
| *info*
| Captures a `noexcept` specification and its evaluated form&period;
|===

Map the SourceInfo to a lazy DOM object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Source&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO&,
    link:#mrdocs-SourceInfo[SourceInfo] const&);
----

Generic ValueFrom for any described enum&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Enum&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;enumerators&lt;Enum&gt;&colon;&colon;value
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    Enum e);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The enumerator to convert to a dom&colon;&colon;Value string&period;
| *v*
| A variant container for any kind of Dom value&period;
|===

Generic tag&lowbar;invoke for described types without context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename IO,
    typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    T const& I);
----

== Description

Same as above but for types that don&apos;t need a DomCorpus (e&period;g&period; Location)&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The lazy object builder to map fields into&period;
| *I*
| The described instance to serialize&period;
|===

Map an ExprInfo to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ExprInfo[ExprInfo] const& expr,
    link:#mrdocs-DomCorpus[DomCorpus] const*);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output parameter to receive the dom&colon;&colon;Value&period;
| *expr*
| The expression info to convert&period;
|===

Serialize a base description into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-BaseInfo[BaseInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| Metadata for a direct base&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Map an ExprInfo to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Expression&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-ExprInfo[ExprInfo] const& expr,
    link:#mrdocs-DomCorpus[DomCorpus] const*);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output parameter to receive the dom&colon;&colon;Value&period;
| *expr*
| The expression info to convert&period;
|===

Serialize a name into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Name[Name] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| Represents a name for a named `Type`
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Return the Param as a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Param&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Param[Param] const& p,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *p*
| Represents a single function parameter
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Convert SymbolID to dom&colon;&colon;Value object in the DOM using Corpus

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-SymbolID[SymbolID] const& id,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *id*
| A unique identifier for a symbol&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize the argument to a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-TArg[TArg] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| Base class for any template argument&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize a template parameter into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&sol;TParamBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-TParam[TParam] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| Base class for a template parameter declaration&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize template info into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-TemplateInfo[TemplateInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| Information about templates and specializations thereof&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize a Type into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Type[Type] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| A possibly qualified type&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Convert an optional SymbolID to dom&colon;&colon;Value or null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;SymbolID&gt;] const& id,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *id*
| A compact optional that automatically uses nullable&lowbar;traits&lt;T&gt; when available&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize an optional template info into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;TemplateInfo&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| A compact optional that automatically uses nullable&lowbar;traits&lt;T&gt; when available&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize an optional polymorphic name into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Name&gt;&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| A compact optional that automatically uses nullable&lowbar;traits&lt;T&gt; when available&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize an optional polymorphic type into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Optional-03[Optional&lt;Polymorphic&lt;Type&gt;&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| A compact optional that automatically uses nullable&lowbar;traits&lt;T&gt; when available&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize a polymorphic name into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| A polymorphic value&hyphen;type&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize a polymorphic template argument into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| A polymorphic value&hyphen;type&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize a polymorphic template parameter&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| A polymorphic value&hyphen;type&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Serialize a polymorphic type into a DOM value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| A variant container for any kind of Dom value&period;
| *I*
| A polymorphic value&hyphen;type&period;
| *domCorpus*
| Front&hyphen;end factory for producing Dom nodes&period;
|===

Convert SymbolID pointers to dom&colon;&colon;Value or null&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    std::unique&lowbar;ptr&lt;SymbolID&gt; const& t,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output parameter to receive the dom&colon;&colon;Value&period;
| *t*
| The SymbolID pointer to convert&period; If null, the dom&colon;&colon;Value is set to null&period;
| *domCorpus*
| The DomCorpus to use, or nullptr&period; If null, the SymbolID is converted to a base16 string&period;
|===

Map a vector of parameters to a link:#mrdocs-dom-Value[`dom&colon;&colon;Value`] object&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Function&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    std::vector&lt;Param&gt; const& params,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output parameter to receive the dom&colon;&colon;Value&period;
| *params*
| The list of parameters to convert&period;
| *domCorpus*
| The DomCorpus used to resolve references&period;
|===

Map an ArrayType to a dom&colon;&colon;Object with split bounds properties&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;ArrayType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-ArrayType[ArrayType] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to map into&period;
| *I*
| The ArrayType to map&period;
| *domCorpus*
| The DomCorpus context&period;
|===

Map a BaseInfo to a dom&colon;&colon;Object with computed access booleans&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;RecordBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-BaseInfo[BaseInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to map into&period;
| *I*
| The BaseInfo to map&period;
| *domCorpus*
| The DomCorpus context&period;
|===

Map a FriendInfo to a dom&colon;&colon;Object with deferred name lookup&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Friend&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-FriendInfo[FriendInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to map into&period;
| *I*
| The FriendInfo to map&period;
| *domCorpus*
| The DomCorpus context&period;
|===

Map a Name to a dom&colon;&colon;Object via visit&hyphen;based polymorphic dispatch&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-Name[Name] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to map into&period;
| *I*
| The Name to map&period;
| *domCorpus*
| The DomCorpus context&period;
|===

Map a RecordSymbol to a dom&colon;&colon;Object with computed defaultAccess&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;Record&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-RecordSymbol[RecordSymbol] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to map into&period;
| *I*
| The RecordSymbol to map&period;
| *domCorpus*
| The DomCorpus context&period;
|===

Map a Symbol to a dom&colon;&colon;Object with computed extraction properties&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-Symbol[Symbol] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to map into&period;
| *I*
| The Symbol to map&period;
| *domCorpus*
| The DomCorpus context&period;
|===

Map a TemplateInfo to a dom&colon;&colon;Object with computed specialization kind&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IO&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    link:#mrdocs-TemplateInfo[TemplateInfo] const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The IO object to map into&period;
| *I*
| The TemplateInfo to map&period;
| *domCorpus*
| The DomCorpus context&period;
|===

Generic ValueFrom for any described compound type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires (describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value &amp;&amp;
              !describe&colon;&colon;has&lowbar;describe&lowbar;enumerators&lt;T&gt;&colon;&colon;value)
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    T const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The output value&period;
| *I*
| The object to convert&period;
| *domCorpus*
| The DomCorpus context&period;
|===

Map the Polymorphic Symbol to a link:#mrdocs-dom-Object[`dom&colon;&colon;Object`]&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class IO,
    link:#mrdocs-polymorphic_storage_for[polymorphic&lowbar;storage&lowbar;for&lt;Symbol&gt;] PolymorphicSymbol&gt;
requires std&colon;&colon;derived&lowbar;from&lt;PolymorphicSymbol, Symbol&gt;
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    PolymorphicSymbol const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The output parameter to receive the dom&colon;&colon;Object&period;
| *I*
| The polymorphic Symbol to convert&period;
| *domCorpus*
| The DomCorpus used to resolve references&period;
|===

Generic tag&lowbar;invoke for any described type with DomCorpus context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename IO,
    typename T&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value
void
tag&lowbar;invoke(
    link:#mrdocs-dom-LazyObjectMapTag[dom::LazyObjectMapTag],
    IO& io,
    T const& I,
    link:#mrdocs-DomCorpus[DomCorpus] const* domCorpus);
----

== Description

Handles all types whose mapping is a straightforward mapReflectedType&lt;true&gt;&period; Custom overloads (more&hyphen;specialized template or non&hyphen;template) are preferred by overload resolution&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *io*
| The lazy object builder to map fields into&period;
| *I*
| The described instance to serialize&period;
| *domCorpus*
| Optional corpus used to resolve cross&hyphen;references&period;
|===

Generic ValueFrom for described enums, with context&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;MapReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Enum,
    typename Context&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;enumerators&lt;Enum&gt;&colon;&colon;value
void
tag&lowbar;invoke(
    link:#mrdocs-dom-ValueFromTag[dom::ValueFromTag],
    link:#mrdocs-dom-Value[dom::Value]& v,
    Enum e,
    Context const&);
----

== Description

Same as above, ignoring the context&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The enumerator to convert to a dom&colon;&colon;Value string&period;
| *v*
| A variant container for any kind of Dom value&period;
|===

Convert a SymbolID to a string

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&sol;SymbolID&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
toBase16Str(link:#mrdocs-SymbolID[SymbolID] const& id);
----

== Return Value

The base16 string representation of the SymbolID&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *id*
| The SymbolID to convert&period;
|===

Convert a string to `camelCase` using ASCII letter rules&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string
toCamelCase(std::string&lowbar;view const input);
----

== Return Value

New string converted to camelCase&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *input*
| Source string&period;
|===

Convert a string to `kebab&hyphen;case` using ASCII letter rules&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string
toKebabCase(std::string&lowbar;view const input);
----

== Return Value

New string converted to kebab&hyphen;case&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *input*
| Source string&period;
|===

`toLowerCase` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Convert a character to lowercase ASCII without locale&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
char
link:#mrdocs-toLowerCase-0a5[toLowerCase](char const c) noexcept;
----

[.small]#link:#mrdocs-toLowerCase-0a5[_» more&period;&period;&period;_]#

Return a lowercase copy of the string without locale&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string
link:#mrdocs-toLowerCase-0e[toLowerCase](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-toLowerCase-0e[_» more&period;&period;&period;_]#

== Return Value

* Lowercase version of `c` if it is uppercase&semi; otherwise `c`&period;
* Lowercase copy of `s`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to convert&period;
| *s*
| Input string&period;
|===

Convert a character to lowercase ASCII without locale&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
char
toLowerCase(char const c) noexcept;
----

== Return Value

Lowercase version of `c` if it is uppercase&semi; otherwise `c`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to convert&period;
|===

Return a lowercase copy of the string without locale&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string
toLowerCase(std::string&lowbar;view const s) noexcept;
----

== Return Value

Lowercase copy of `s`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| Input string&period;
|===

Convert a string to `PascalCase` using ASCII letter rules&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string
toPascalCase(std::string&lowbar;view const input);
----

== Return Value

New string converted to PascalCase&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *input*
| Source string&period;
|===

Convert a string to `snake&lowbar;case` using ASCII letter rules&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string
toSnakeCase(std::string&lowbar;view const input);
----

== Return Value

New string converted to snake&lowbar;case&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *input*
| Source string&period;
|===

`toString` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

Convert access specifier to its string form&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-0d3[toString](link:#mrdocs-AccessKind[AccessKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-0d3[_» more&period;&period;&period;_]#

Convert an auto&hyphen;kind to its spelling&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-0f4[toString](link:#mrdocs-AutoKind[AutoKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-0f4[_» more&period;&period;&period;_]#

Convert a constexpr&sol;consteval specifier kind to a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-0fa[toString](link:#mrdocs-ConstexprKind[ConstexprKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-0fa[_» more&period;&period;&period;_]#

Convert an explicit kind to its string form&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-01b5[toString](link:#mrdocs-ExplicitKind[ExplicitKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-01b5[_» more&period;&period;&period;_]#

Convert a FundamentalTypeKind to a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
link:#mrdocs-toString-0b[toString](link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-0b[_» more&period;&period;&period;_]#

Convert a noexcept kind to its string form&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-093[toString](link:#mrdocs-NoexceptKind[NoexceptKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-093[_» more&period;&period;&period;_]#

Convert a cv&sol;ref qualifier kind to its string form&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-09c[toString](link:#mrdocs-QualifierKind[QualifierKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-09c[_» more&period;&period;&period;_]#

Convert a reference kind to its string representation&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-01bf[toString](link:#mrdocs-ReferenceKind[ReferenceKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-01bf[_» more&period;&period;&period;_]#

Convert a storage class kind to its string form&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-05[toString](link:#mrdocs-StorageClassKind[StorageClassKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-05[_» more&period;&period;&period;_]#

Convert the specialization kind to a readable string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
link:#mrdocs-toString-06[toString](link:#mrdocs-TemplateSpecKind[TemplateSpecKind] kind);
----

[.small]#link:#mrdocs-toString-06[_» more&period;&period;&period;_]#

Convert a TypeKind to its string representation&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-0e[toString](link:#mrdocs-TypeKind[TypeKind] kind) noexcept;
----

[.small]#link:#mrdocs-toString-0e[_» more&period;&period;&period;_]#

Convert the name to a human&hyphen;readable string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-toString-0c[toString](link:#mrdocs-Name[Name] const& N);
----

[.small]#link:#mrdocs-toString-0c[_» more&period;&period;&period;_]#

Convert a template argument to a human&hyphen;readable string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-toString-087[toString](link:#mrdocs-TArg[TArg] const& arg) noexcept;
----

[.small]#link:#mrdocs-toString-087[_» more&period;&period;&period;_]#

Convert a described enumerator to string form&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Enum&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;enumerators&lt;Enum&gt;&colon;&colon;value
std::string
link:#mrdocs-toString-023[toString](Enum e);
----

[.small]#link:#mrdocs-toString-023[_» more&period;&period;&period;_]#

Render a type to a human&hyphen;readable string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
link:#mrdocs-toString-09f[toString](
    link:#mrdocs-Type[Type] const& T,
    std::string&lowbar;view Name = &quot;&quot;);
----

[.small]#link:#mrdocs-toString-09f[_» more&period;&period;&period;_]#

Convert ExplicitInfo to a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-082[toString](
    link:#mrdocs-ExplicitInfo[ExplicitInfo] const& info,
    bool resolved = false,
    bool implicit = false);
----

[.small]#link:#mrdocs-toString-082[_» more&period;&period;&period;_]#

Convert NoexceptInfo to a string&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
link:#mrdocs-toString-0dc[toString](
    link:#mrdocs-NoexceptInfo[NoexceptInfo] const& info,
    bool resolved = false,
    bool implicit = false);
----

[.small]#link:#mrdocs-toString-0dc[_» more&period;&period;&period;_]#

== Return Value

* String naming the keyword&period;
* The string representation of the kind
* String view naming the specialization category&period;
* The textual form of the name&period;
* Descriptive text for the argument&period;
* The string form of the enumerator&period;
* Text representation of the type&period;
* The string representation of the explicit&hyphen;specifier&period;
* The string representation of the noexcept&hyphen;specifier&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The enumerator to convert&period;
| *T*
| Type to render&period;
| *Name*
| Optional identifier to append&period;
| *info*
| The explicit&hyphen;specifier information&period;
| *resolved*
| If true, the operand is not shown when the explicit&hyphen;specifier is non&hyphen;dependent&period;
| *implicit*
| If true, implicit explicit&hyphen;specifiers are shown&period;
|===

Convert access specifier to its string form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;AccessKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-AccessKind[AccessKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Access specifier&period;
|===

Convert an auto&hyphen;kind to its spelling&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;AutoKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-AutoKind[AutoKind] kind) noexcept;
----

== Return Value

String naming the keyword&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The kind of `auto` keyword used in a declaration&period;
|===

Convert a constexpr&sol;consteval specifier kind to a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ConstexprKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-ConstexprKind[ConstexprKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| `constexpr`&sol;`consteval` specifier kinds
|===

Convert an explicit kind to its string form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-ExplicitKind[ExplicitKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Explicit specifier kinds
|===

Convert a FundamentalTypeKind to a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;FundamentalTypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
toString(link:#mrdocs-FundamentalTypeKind[FundamentalTypeKind] kind) noexcept;
----

== Description

This function converts a FundamentalTypeKind to the shortest canonical string representing the type&period;

== Return Value

The string representation of the kind

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Categorically describes a fundamental type&period;
|===

Convert a noexcept kind to its string form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-NoexceptKind[NoexceptKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Exception specification kinds
|===

Convert a cv&sol;ref qualifier kind to its string form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;QualifierKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-QualifierKind[QualifierKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Type qualifiers
|===

Convert a reference kind to its string representation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ReferenceKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-ReferenceKind[ReferenceKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Reference type kinds
|===

Convert a storage class kind to its string form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;StorageClassKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-StorageClassKind[StorageClassKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Storage class kinds
|===

Convert the specialization kind to a readable string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Template&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string&lowbar;view
toString(link:#mrdocs-TemplateSpecKind[TemplateSpecKind] kind);
----

== Return Value

String view naming the specialization category&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| The kind of template or specialization&period;
|===

Convert a TypeKind to its string representation&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeKind&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(link:#mrdocs-TypeKind[TypeKind] kind) noexcept;
----

== Return Value

UTF&hyphen;8 string value used by the DOM&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *kind*
| Variants of C&plus;&plus; types captured in metadata&period;
|===

Convert the name to a human&hyphen;readable string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
toString(link:#mrdocs-Name[Name] const& N);
----

== Return Value

The textual form of the name&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *N*
| Represents a name for a named `Type`
|===

Convert a template argument to a human&hyphen;readable string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&sol;TArgBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
toString(link:#mrdocs-TArg[TArg] const& arg) noexcept;
----

== Return Value

Descriptive text for the argument&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *arg*
| Base class for any template argument&period;
|===

Convert a described enumerator to string form&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;EnumToString&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Enum&gt;
requires describe&colon;&colon;has&lowbar;describe&lowbar;enumerators&lt;Enum&gt;&colon;&colon;value
std::string
toString(Enum e);
----

== Return Value

The string form of the enumerator&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *e*
| The enumerator to convert&period;
|===

Render a type to a human&hyphen;readable string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::string
toString(
    link:#mrdocs-Type[Type] const& T,
    std::string&lowbar;view Name = &quot;&quot;);
----

== Return Value

Text representation of the type&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *T*
| Type to render&period;
| *Name*
| Optional identifier to append&period;
|===

Convert ExplicitInfo to a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;ExplicitInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(
    link:#mrdocs-ExplicitInfo[ExplicitInfo] const& info,
    bool resolved = false,
    bool implicit = false);
----

== Return Value

The string representation of the explicit&hyphen;specifier&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *info*
| The explicit&hyphen;specifier information&period;
| *resolved*
| If true, the operand is not shown when the explicit&hyphen;specifier is non&hyphen;dependent&period;
| *implicit*
| If true, implicit explicit&hyphen;specifiers are shown&period;
|===

Convert NoexceptInfo to a string&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Specifiers&sol;NoexceptInfo&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-dom-String[dom::String]
toString(
    link:#mrdocs-NoexceptInfo[NoexceptInfo] const& info,
    bool resolved = false,
    bool implicit = false);
----

== Return Value

The string representation of the noexcept&hyphen;specifier&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *info*
| The noexcept&hyphen;specifier information&period;
| *resolved*
| If true, the operand is not shown when the exception specification is non&hyphen;dependent&period;
| *implicit*
| If true, implicit exception specifications are shown&period;
|===

`toUpperCase` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Convert a character to uppercase ASCII without locale&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
char
link:#mrdocs-toUpperCase-0e[toUpperCase](char const c) noexcept;
----

[.small]#link:#mrdocs-toUpperCase-0e[_» more&period;&period;&period;_]#

Return an uppercase copy of the string without locale&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string
link:#mrdocs-toUpperCase-06[toUpperCase](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-toUpperCase-06[_» more&period;&period;&period;_]#

== Return Value

* Uppercase version of `c` if it is lowercase&semi; otherwise `c`&period;
* Uppercase copy of `s`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to convert&period;
| *s*
| Input string&period;
|===

Convert a character to uppercase ASCII without locale&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
char
toUpperCase(char const c) noexcept;
----

== Return Value

Uppercase version of `c` if it is lowercase&semi; otherwise `c`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *c*
| Character to convert&period;
|===

Return an uppercase copy of the string without locale&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string
toUpperCase(std::string&lowbar;view const s) noexcept;
----

== Return Value

Uppercase copy of `s`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| Input string&period;
|===

Return the value as its underlying type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;TypeTraits&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Enum&gt;
requires std&colon;&colon;is&lowbar;enum&lowbar;v&lt;Enum&gt;
constexpr
std::underlying&lowbar;type&lowbar;t&lt;Enum&gt;
to&lowbar;underlying(Enum value) noexcept;
----

== Return Value

the value as its underlying type&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *value*
| The enum value to convert
|===

Traverse a DocComment tree top&hyphen;down (pre&hyphen;order)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mrdocs-DocCommentNodeTraversable[DocCommentNodeTraversable] T,
    class F&gt;
void
topDownTraverse(
    T& node,
    F&& func);
----

== Parameters

[cols="1,4"]
|===
|Name|Description

| *node*
| Root node to traverse&period;
| *func*
| Visitor invoked before children are visited&period;
|===

`trim` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

Return the substring without leading and trailing horizontal whitespace&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
link:#mrdocs-trim-03[trim](std::string&lowbar;view const s) noexcept;
----

[.small]#link:#mrdocs-trim-03[_» more&period;&period;&period;_]#

Return the substring without leading and trailing specified characters&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
link:#mrdocs-trim-04[trim](
    std::string&lowbar;view const s,
    std::string&lowbar;view const chars) noexcept;
----

[.small]#link:#mrdocs-trim-04[_» more&period;&period;&period;_]#

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
| *chars*
| The characters to remove&period;
|===

Return the substring without leading and trailing horizontal whitespace&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
trim(std::string&lowbar;view const s) noexcept;
----

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
|===

Return the substring without leading and trailing specified characters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;String&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::string&lowbar;view
trim(
    std::string&lowbar;view const s,
    std::string&lowbar;view const chars) noexcept;
----

== Return Value

The modified string&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *s*
| The string to trim&period;
| *chars*
| The characters to remove&period;
|===

`visit` overloads

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&period;hpp&gt;`

Visit a template parameter, dispatching to its concrete type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename TParamTy,
    typename F,
    typename&period;&period;&period; Args&gt;
requires std&colon;&colon;derived&lowbar;from&lt;TParamTy, TParam&gt;
constexpr
decltype(auto)
link:#mrdocs-visit-01[visit](
    TParamTy& P,
    F&& f,
    Args&&&period;&period;&period; args);
----

[.small]#link:#mrdocs-visit-01[_» more&period;&period;&period;_]#

Visit a link:#mrdocs-Type[`Type`] with the provided callable&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Symbol&gt; TypeTy,
    class F,
    class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
link:#mrdocs-visit-09[visit](
    TypeTy& info,
    F&& fn,
    Args&&&period;&period;&period; args);
----

[.small]#link:#mrdocs-visit-09[_» more&period;&period;&period;_]#

== Return Value

* Whatever the callable returns&period;
* The result of calling the function object with the derived type

== Parameters

[cols="1,4"]
|===
|Name|Description

| *P*
| Parameter to visit&period;
| *f*
| Callable to receive the concrete parameter&period;
| *args*
| Additional arguments forwarded to the callable&period;
| *info*
| The type instance to visit&period;
| *fn*
| The callable to dispatch to the concrete type&period;
|===

Visit a template parameter, dispatching to its concrete type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename TParamTy,
    typename F,
    typename&period;&period;&period; Args&gt;
requires std&colon;&colon;derived&lowbar;from&lt;TParamTy, TParam&gt;
constexpr
decltype(auto)
visit(
    TParamTy& P,
    F&& f,
    Args&&&period;&period;&period; args);
----

== Return Value

Whatever the callable returns&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *P*
| Parameter to visit&period;
| *f*
| Callable to receive the concrete parameter&period;
| *args*
| Additional arguments forwarded to the callable&period;
|===

Visit a link:#mrdocs-Type[`Type`] with the provided callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;Symbol&gt; TypeTy,
    class F,
    class&period;&period;&period; Args&gt;
constexpr
decltype(auto)
visit(
    TypeTy& info,
    F&& fn,
    Args&&&period;&period;&period; args);
----

== Description

Visit a template argument, dispatching on its concrete kind&period;

Invoke a function object with a type derived from Symbol

This function will invoke the function object `fn` with a type derived from `Symbol` as the first argument, followed by `args&period;&period;&period;`&period; The type of the first argument is determined by the `SymbolKind` of the `Symbol` object&period;

== Return Value

* Whatever the callable returns&period;
* The result of calling the function object with the derived type

== Parameters

[cols="1,4"]
|===
|Name|Description

| *info*
| The type instance to visit&period;
| *fn*
| The callable to dispatch to the concrete type&period;
| *args*
| Additional arguments forwarded to the callable&period;
|===

Visits a std&colon;&colon;variant and calls the combined callable with the active index and the value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class Variant,
    class&period;&period;&period; Ts&gt;
constexpr
decltype(auto)
visitIndexed(
    Variant&& v,
    Ts&&&period;&period;&period; xs);
----

== Description

Unlike match, visitIndexed passes an additional first parameter to your callable set&colon; the runtime index of the active alternative (as a std&colon;&colon;size&lowbar;t)&period;

This is useful when you need both the value and which alternative was selected, without relying on type&hyphen;unique alternatives&period;

The supplied callables are combined via makeOverload and are expected to accept a signature like (std&colon;&colon;size&lowbar;t index, T value) for the relevant T&period;

[,cpp]
----
std::variant<int, double, std::string> v = 3.14;
fn::visitIndexed(v,
    [](std::size_t i, int x) { return i + x; },
    [](std::size_t i, double d) { return d + i; },
    [](std::size_t i, const std::string& s) { return s.size() + i; });
----
== Return Value

The result of invoking the selected callable&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *v*
| The variant to visit&period;
| *xs*
| The callables to be combined with makeOverload and invoked with (index, value)&period;
|===

Factory that creates a YCombinator from a callable&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mrdocs-YCombinator[YCombinator&lt;std::decay&lowbar;t&lt;F&gt;&gt;]
yCombinator(F&& f) noexcept(std&colon;&colon;is&lowbar;nothrow&lowbar;constructible&lowbar;v&lt;std&colon;&colon;decay&lowbar;t&lt;F&gt;, F &amp;&amp;&gt;);
----

== Description

Prefer this helper to avoid spelling template arguments explicitly&period;

auto fib &equals; fn&colon;&colon;yCombinator( &lsqb;&rsqb;self, int n) &hyphen;&gt; int &lcub; return n &lt;&equals; 1 ? n &colon; self(n &hyphen; 1) &plus; self(n &hyphen; 2)&semi; &rcub;)&semi;

== Return Value

A YCombinator storing a decayed copy of the callable&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *f*
| The callable to wrap&period;
|===

Write to output

== Synopses

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

Write to output


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OutputRef[OutputRef]&
link:#mrdocs-operator_lshift-0a[operator&lt;&lt;](
    link:#mrdocs-OutputRef[OutputRef]& os,
    T v);
----

[.small]#link:#mrdocs-operator_lshift-0a[_» more&period;&period;&period;_]#

Write to output


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OutputRef[OutputRef]&
link:#mrdocs-operator_lshift-0f[operator&lt;&lt;](
    link:#mrdocs-OutputRef[OutputRef]& os,
    char const* c);
----

[.small]#link:#mrdocs-operator_lshift-0f[_» more&period;&period;&period;_]#

Write to output


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OutputRef[OutputRef]&
link:#mrdocs-operator_lshift-0e9[operator&lt;&lt;](
    link:#mrdocs-OutputRef[OutputRef]& os,
    char c);
----

[.small]#link:#mrdocs-operator_lshift-0e9[_» more&period;&period;&period;_]#

Write to output


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OutputRef[OutputRef]&
link:#mrdocs-operator_lshift-01[operator&lt;&lt;](
    link:#mrdocs-OutputRef[OutputRef]& os,
    std::string&lowbar;view sv);
----

[.small]#link:#mrdocs-operator_lshift-01[_» more&period;&period;&period;_]#

== Return Value

A reference to this object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The output stream reference
| *v*
| The character to write
| *c*
| The string to write
| *sv*
| The string to write
|===

Write to output

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OutputRef[OutputRef]&
operator&lt;&lt;(
    link:#mrdocs-OutputRef[OutputRef]& os,
    T v);
----

== Return Value

A reference to this object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The output stream reference
| *v*
| The character to write
|===

Write to output

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OutputRef[OutputRef]&
operator&lt;&lt;(
    link:#mrdocs-OutputRef[OutputRef]& os,
    char const* c);
----

== Return Value

A reference to this object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The output stream reference
| *c*
| The string to write
|===

Write to output

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OutputRef[OutputRef]&
operator&lt;&lt;(
    link:#mrdocs-OutputRef[OutputRef]& os,
    char c);
----

== Return Value

A reference to this object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The output stream reference
| *c*
| The character to write
|===

Write to output

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Handlebars&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mrdocs-OutputRef[OutputRef]&
operator&lt;&lt;(
    link:#mrdocs-OutputRef[OutputRef]& os,
    std::string&lowbar;view sv);
----

== Return Value

A reference to this object

== Parameters

[cols="1,4"]
|===
|Name|Description

| *os*
| The output stream reference
| *sv*
| The string to write
|===

Equality operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-002[operator&equals;&equals;](
    link:#mrdocs-Expected-0f[Expected] const& x,
    link:#mrdocs-Expected-0a[Expected&lt;U, E2&gt;] const& y) noexcept(noexcept(bool(x&period;error() &equals;&equals; y&period;error())));
----

[.small]#link:#mrdocs-operator_eq-002[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-0d[operator&equals;&equals;](
    link:#mrdocs-SplitLinesView-Iterator[Iterator] const& it,
    std::default&lowbar;sentinel&lowbar;t rhs) noexcept;
----

[.small]#link:#mrdocs-operator_eq-0d[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-01e[operator&equals;&equals;](
    link:#mrdocs-ParseResult[ParseResult] const& lhs,
    link:#mrdocs-ParseResult[ParseResult] const& rhs) = default;
----

[.small]#link:#mrdocs-operator_eq-01e[_» more&period;&period;&period;_]#

Equality helper for polymorphic template parameters&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-operator_eq-0f[operator&equals;&equals;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_eq-0f[_» more&period;&period;&period;_]#

Equality for polymorphic template arguments&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-operator_eq-0c6[operator&equals;&equals;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& a,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& b);
----

[.small]#link:#mrdocs-operator_eq-0c6[_» more&period;&period;&period;_]#

Equality for two polymorphic types&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-operator_eq-02[operator&equals;&equals;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& a,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& b);
----

[.small]#link:#mrdocs-operator_eq-02[_» more&period;&period;&period;_]#

Equality for two polymorphic names&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
link:#mrdocs-operator_eq-0c4[operator&equals;&equals;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& a,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& b);
----

[.small]#link:#mrdocs-operator_eq-0c4[_» more&period;&period;&period;_]#

Equality for any described type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires DescribedComparable&lt;T&gt;
bool
link:#mrdocs-operator_eq-0cd[operator&equals;&equals;](
    T const& a,
    T const& b);
----

[.small]#link:#mrdocs-operator_eq-0cd[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-01b[operator&equals;&equals;](
    link:#mrdocs-Expected-01[Expected] const& x,
    link:#mrdocs-Expected-0a[Expected&lt;U, E2&gt;] const& y) noexcept(noexcept(bool(&ast;x &equals;&equals; &ast;y)) &amp;&amp; noexcept(bool(x&period;error() &equals;&equals; y&period;error())))
requires (!std&colon;&colon;is&lowbar;void&lowbar;v&lt;U&gt;);
----

[.small]#link:#mrdocs-operator_eq-01b[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-0cf[operator&equals;&equals;](
    link:#mrdocs-Expected-01[Expected] const& x,
    U const& v) noexcept(noexcept(bool(&ast;x &equals;&equals; v)));
----

[.small]#link:#mrdocs-operator_eq-0cf[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-087[operator&equals;&equals;](
    link:#mrdocs-Expected-01[Expected] const& x,
    link:#mrdocs-Unexpected-0c[Unexpected&lt;E2&gt;] const& e) noexcept(noexcept(bool(x&period;error() &equals;&equals; e&period;error())));
----

[.small]#link:#mrdocs-operator_eq-087[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-07[operator&equals;&equals;](
    link:#mrdocs-ArrayView-06[ArrayView] a,
    link:#mrdocs-ArrayView-06[ArrayView] b) noexcept
requires requires (const T&amp; x, const T&amp; y) &lcub; &lcub; x &equals;&equals; y &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;bool&gt;&semi; &rcub;;
----

[.small]#link:#mrdocs-operator_eq-07[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-09[operator&equals;&equals;](
    link:#mrdocs-Expected-0a[Expected] const& x,
    link:#mrdocs-Expected-0a[Expected&lt;U, E2&gt;] const& y) noexcept(noexcept(bool(&ast;x &equals;&equals; &ast;y)) &amp;&amp; noexcept(bool(x&period;error() &equals;&equals; y&period;error())));
----

[.small]#link:#mrdocs-operator_eq-09[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-03[operator&equals;&equals;](
    link:#mrdocs-Expected-0a[Expected] const& x,
    U const& v) noexcept(noexcept(bool(&ast;x &equals;&equals; v)));
----

[.small]#link:#mrdocs-operator_eq-03[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
link:#mrdocs-operator_eq-066[operator&equals;&equals;](
    link:#mrdocs-Expected-0a[Expected] const& x,
    link:#mrdocs-Unexpected-0c[Unexpected&lt;E2&gt;] const& e) noexcept(noexcept(bool(x&period;error() &equals;&equals; e&period;error())));
----

[.small]#link:#mrdocs-operator_eq-066[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mrdocs-operator_eq-0a[operator&equals;&equals;](
    link:#mrdocs-Unexpected-0c[Unexpected] const& x,
    link:#mrdocs-Unexpected-0c[Unexpected&lt;Er&gt;] const& y);
----

[.small]#link:#mrdocs-operator_eq-0a[_» more&period;&period;&period;_]#

Equality comparison of two polymorphic objects&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Base&gt;
requires detail&colon;&colon;CanVisitCompare&lt;Base&gt;
bool
link:#mrdocs-operator_eq-06c[operator&equals;&equals;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_eq-06c[_» more&period;&period;&period;_]#

Compares a value to an engaged Optional for equality&period; Returns true if the Optional is engaged and its value equals lhs&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_eq-0cb[operator&equals;&equals;](
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_eq-0cb[_» more&period;&period;&period;_]#

Compares an engaged Optional to a value for equality&period; Returns true if the Optional is engaged and its value equals rhs&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_eq-0c9[operator&equals;&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

[.small]#link:#mrdocs-operator_eq-0c9[_» more&period;&period;&period;_]#

Checks if the Optional is disengaged (equal to std&colon;&colon;nullopt)&period; Returns true if the Optional does not contain a value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mrdocs-operator_eq-08f[operator&equals;&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    std::nullopt&lowbar;t rhs) noexcept;
----

[.small]#link:#mrdocs-operator_eq-08f[_» more&period;&period;&period;_]#

Compares two Optional values for equality&period; Returns true if both are engaged and their contained values are equal, or both are disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_eq-00b[operator&equals;&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_eq-00b[_» more&period;&period;&period;_]#

== Return Value

* true when objects compare equal&period;
* `true` if the optional is engaged and equal to `lhs`&semi; otherwise, `false`&period;
* `true` if the optional is engaged and equal to `rhs`&semi; otherwise, `false`&period;
* `true` if the optional is disengaged&semi; otherwise, `false`&period;
* `true` if both optionals are engaged and equal, or both are disengaged&semi; otherwise, `false`&period;

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Expected-0f[Expected] const& x,
    link:#mrdocs-Expected-0a[Expected&lt;U, E2&gt;] const& y) noexcept(noexcept(bool(x&period;error() &equals;&equals; y&period;error())));
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *y*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;SplitLines&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-SplitLinesView-Iterator[Iterator] const& it,
    std::default&lowbar;sentinel&lowbar;t rhs) noexcept;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *it*
| The left operand
| *rhs*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-ParseResult[ParseResult] const& lhs,
    link:#mrdocs-ParseResult[ParseResult] const& rhs) = default;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality helper for polymorphic template parameters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& rhs);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality for polymorphic template arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& a,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& b);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Equality for two polymorphic types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& a,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& b);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Equality for two polymorphic names&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
bool
operator&equals;&equals;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& a,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& b);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Equality for any described type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;CompareReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires DescribedComparable&lt;T&gt;
bool
operator&equals;&equals;(
    T const& a,
    T const& b);
----

== Description

Needed because removing a defaulted member `operator&lt;&equals;&gt;()` also removes the implicitly&hyphen;generated `operator&equals;&equals;()`&period;

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Expected-01[Expected] const& x,
    link:#mrdocs-Expected-0a[Expected&lt;U, E2&gt;] const& y) noexcept(noexcept(bool(&ast;x &equals;&equals; &ast;y)) &amp;&amp; noexcept(bool(x&period;error() &equals;&equals; y&period;error())))
requires (!std&colon;&colon;is&lowbar;void&lowbar;v&lt;U&gt;);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *y*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Expected-01[Expected] const& x,
    U const& v) noexcept(noexcept(bool(&ast;x &equals;&equals; v)));
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *v*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Expected-01[Expected] const& x,
    link:#mrdocs-Unexpected-0c[Unexpected&lt;E2&gt;] const& e) noexcept(noexcept(bool(x&period;error() &equals;&equals; e&period;error())));
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *e*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-ArrayView-06[ArrayView] a,
    link:#mrdocs-ArrayView-06[ArrayView] b) noexcept
requires requires (const T&amp; x, const T&amp; y) &lcub; &lcub; x &equals;&equals; y &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;bool&gt;&semi; &rcub;;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Expected-0a[Expected] const& x,
    link:#mrdocs-Expected-0a[Expected&lt;U, E2&gt;] const& y) noexcept(noexcept(bool(&ast;x &equals;&equals; &ast;y)) &amp;&amp; noexcept(bool(x&period;error() &equals;&equals; y&period;error())));
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *y*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Expected-0a[Expected] const& x,
    U const& v) noexcept(noexcept(bool(&ast;x &equals;&equals; v)));
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *v*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Expected-0a[Expected] const& x,
    link:#mrdocs-Unexpected-0c[Unexpected&lt;E2&gt;] const& e) noexcept(noexcept(bool(x&period;error() &equals;&equals; e&period;error())));
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *e*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Unexpected-0c[Unexpected] const& x,
    link:#mrdocs-Unexpected-0c[Unexpected&lt;Er&gt;] const& y);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *y*
| The right operand
|===

Equality comparison of two polymorphic objects&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Base&gt;
requires detail&colon;&colon;CanVisitCompare&lt;Base&gt;
bool
operator&equals;&equals;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& rhs);
----

== Return Value

true when objects compare equal&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compares a value to an engaged Optional for equality&period; Returns true if the Optional is engaged and its value equals lhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&equals;&equals;(
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if the optional is engaged and equal to `lhs`&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compares an engaged Optional to a value for equality&period; Returns true if the Optional is engaged and its value equals rhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&equals;&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

== Return Value

`true` if the optional is engaged and equal to `rhs`&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if the Optional is disengaged (equal to std&colon;&colon;nullopt)&period; Returns true if the Optional does not contain a value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
operator&equals;&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    std::nullopt&lowbar;t rhs) noexcept;
----

== Return Value

`true` if the optional is disengaged&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compares two Optional values for equality&period; Returns true if both are engaged and their contained values are equal, or both are disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&equals;&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if both optionals are engaged and equal, or both are disengaged&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Inequality operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Compares two Optional values for inequality&period; Returns true if their engagement states differ or their contained values are not equal&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_not_eq-06[operator!&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_not_eq-06[_» more&period;&period;&period;_]#

Compares an Optional to a value for inequality&period; Returns true if the Optional is disengaged or its value does not equal rhs&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_not_eq-04[operator!&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

[.small]#link:#mrdocs-operator_not_eq-04[_» more&period;&period;&period;_]#

Compares a value to an Optional for inequality&period; Returns true if the Optional is disengaged or its value does not equal lhs&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_not_eq-0f[operator!&equals;](
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_not_eq-0f[_» more&period;&period;&period;_]#

== Return Value

* `true` if the optionals differ in engagement or value&semi; otherwise, `false`&period;
* `true` if the optional is disengaged or not equal to `rhs`&semi; otherwise, `false`&period;
* `true` if the optional is disengaged or not equal to `lhs`&semi; otherwise, `false`&period;

Compares two Optional values for inequality&period; Returns true if their engagement states differ or their contained values are not equal&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator!&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if the optionals differ in engagement or value&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compares an Optional to a value for inequality&period; Returns true if the Optional is disengaged or its value does not equal rhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator!&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

== Return Value

`true` if the optional is disengaged or not equal to `rhs`&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compares a value to an Optional for inequality&period; Returns true if the Optional is disengaged or its value does not equal lhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator!&equals;(
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if the optional is disengaged or not equal to `lhs`&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Less&hyphen;than operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Checks if the left Optional is less than the right Optional&period; Returns true if the right is engaged and either the left is disengaged or its value is less&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_lt-09[operator&lt;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_lt-09[_» more&period;&period;&period;_]#

Checks if the Optional is less than a value&period; Returns true if the Optional is disengaged or its value is less than rhs&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_lt-0c[operator&lt;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

[.small]#link:#mrdocs-operator_lt-0c[_» more&period;&period;&period;_]#

Checks if a value is less than an engaged Optional&period; Returns true if the Optional is engaged and lhs is less than its value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_lt-08[operator&lt;](
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_lt-08[_» more&period;&period;&period;_]#

== Return Value

* `true` if `lhs` is less than `rhs` according to the described rules&semi; otherwise, `false`&period;
* `true` if the optional is disengaged or less than `rhs`&semi; otherwise, `false`&period;
* `true` if the optional is engaged and `lhs` is less than its value&semi; otherwise, `false`&period;

Checks if the left Optional is less than the right Optional&period; Returns true if the right is engaged and either the left is disengaged or its value is less&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&lt;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if `lhs` is less than `rhs` according to the described rules&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if the Optional is less than a value&period; Returns true if the Optional is disengaged or its value is less than rhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&lt;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

== Return Value

`true` if the optional is disengaged or less than `rhs`&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if a value is less than an engaged Optional&period; Returns true if the Optional is engaged and lhs is less than its value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&lt;(
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if the optional is engaged and `lhs` is less than its value&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Less&hyphen;than&hyphen;or&hyphen;equal operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Checks if the left Optional is less than or equal to the right Optional&period; Returns true if the left is disengaged or the right is engaged and the left&apos;s value is less or equal&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_le-08[operator&lt;&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_le-08[_» more&period;&period;&period;_]#

Checks if the Optional is less than or equal to a value&period; Returns true if the Optional is disengaged or its value is less than or equal to rhs&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_le-0e[operator&lt;&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

[.small]#link:#mrdocs-operator_le-0e[_» more&period;&period;&period;_]#

Checks if a value is less than or equal to an engaged Optional&period; Returns true if the Optional is engaged and lhs is less than or equal to its value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_le-03[operator&lt;&equals;](
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_le-03[_» more&period;&period;&period;_]#

== Return Value

* `true` if `lhs` is less than or equal to `rhs` according to the described rules&semi; otherwise, `false`&period;
* `true` if the optional is disengaged or less than or equal to `rhs`&semi; otherwise, `false`&period;
* `true` if the optional is engaged and `lhs` is less than or equal to its value&semi; otherwise, `false`&period;

Checks if the left Optional is less than or equal to the right Optional&period; Returns true if the left is disengaged or the right is engaged and the left&apos;s value is less or equal&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&lt;&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if `lhs` is less than or equal to `rhs` according to the described rules&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if the Optional is less than or equal to a value&period; Returns true if the Optional is disengaged or its value is less than or equal to rhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&lt;&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

== Return Value

`true` if the optional is disengaged or less than or equal to `rhs`&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if a value is less than or equal to an engaged Optional&period; Returns true if the Optional is engaged and lhs is less than or equal to its value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&lt;&equals;(
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if the optional is engaged and `lhs` is less than or equal to its value&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Greater&hyphen;than operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Checks if the left Optional is greater than the right Optional&period; Returns true if the left is engaged and either the right is disengaged or its value is greater&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_gt-0a0[operator&gt;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_gt-0a0[_» more&period;&period;&period;_]#

Checks if the Optional is greater than a value&period; Returns true if the Optional is engaged and its value is greater than rhs&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_gt-0ab[operator&gt;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

[.small]#link:#mrdocs-operator_gt-0ab[_» more&period;&period;&period;_]#

Checks if a value is greater than an Optional&period; Returns true if the Optional is disengaged or lhs is greater than its value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_gt-0d[operator&gt;](
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_gt-0d[_» more&period;&period;&period;_]#

== Return Value

* `true` if `lhs` is greater than `rhs` according to the described rules&semi; otherwise, `false`&period;
* `true` if the optional is engaged and greater than `rhs`&semi; otherwise, `false`&period;
* `true` if the optional is disengaged or `lhs` is greater than its value&semi; otherwise, `false`&period;

Checks if the left Optional is greater than the right Optional&period; Returns true if the left is engaged and either the right is disengaged or its value is greater&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&gt;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if `lhs` is greater than `rhs` according to the described rules&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if the Optional is greater than a value&period; Returns true if the Optional is engaged and its value is greater than rhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&gt;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

== Return Value

`true` if the optional is engaged and greater than `rhs`&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if a value is greater than an Optional&period; Returns true if the Optional is disengaged or lhs is greater than its value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&gt;(
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if the optional is disengaged or `lhs` is greater than its value&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Greater&hyphen;than&hyphen;or&hyphen;equal operators

== Synopses

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

Checks if the left Optional is greater than or equal to the right Optional&period; Returns true if the right is disengaged or the left is engaged and its value is greater or equal&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_ge-04[operator&gt;&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_ge-04[_» more&period;&period;&period;_]#

Checks if the Optional is greater than or equal to a value&period; Returns true if the Optional is engaged and its value is greater than or equal to rhs&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_ge-07[operator&gt;&equals;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

[.small]#link:#mrdocs-operator_ge-07[_» more&period;&period;&period;_]#

Checks if a value is greater than or equal to an Optional&period; Returns true if the Optional is disengaged or lhs is greater than or equal to its value&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
link:#mrdocs-operator_ge-0b[operator&gt;&equals;](
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_ge-0b[_» more&period;&period;&period;_]#

== Return Value

* `true` if `lhs` is greater than or equal to `rhs` according to the described rules&semi; otherwise, `false`&period;
* `true` if the optional is engaged and greater than or equal to `rhs`&semi; otherwise, `false`&period;
* `true` if the optional is disengaged or `lhs` is greater than or equal to its value&semi; otherwise, `false`&period;

Checks if the left Optional is greater than or equal to the right Optional&period; Returns true if the right is disengaged or the left is engaged and its value is greater or equal&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&gt;&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if `lhs` is greater than or equal to `rhs` according to the described rules&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if the Optional is greater than or equal to a value&period; Returns true if the Optional is engaged and its value is greater than or equal to rhs&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;U&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&gt;&equals;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& lhs,
    U const& rhs);
----

== Return Value

`true` if the optional is engaged and greater than or equal to `rhs`&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Checks if a value is greater than or equal to an Optional&period; Returns true if the Optional is disengaged or lhs is greater than or equal to its value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isOptionalV&lt;T&gt;)
constexpr
&sol;&ast; implementation-defined &ast;&sol;
operator&gt;&equals;(
    T const& lhs,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& rhs);
----

== Return Value

`true` if the optional is disengaged or `lhs` is greater than or equal to its value&semi; otherwise, `false`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operators

== Synopses

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
link:#mrdocs-operator_3way-0a[operator&lt;&equals;&gt;](
    link:#mrdocs-ArrayView-06[ArrayView] a,
    link:#mrdocs-ArrayView-06[ArrayView] b) noexcept
requires requires (const T&amp; x, const T&amp; y) &lcub; x &lt;&equals;&gt; y&semi; &rcub;;
----

[.small]#link:#mrdocs-operator_3way-0a[_» more&period;&period;&period;_]#

Performs a three&hyphen;way comparison between two Optional values&period; If both are engaged, compares their contained values&semi; otherwise, compares engagement state&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    std::three&lowbar;way&lowbar;comparable&lowbar;with&lt;T&gt; U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
std::compare&lowbar;three&lowbar;way&lowbar;result&lowbar;t&lt;T, U&gt;
link:#mrdocs-operator_3way-081[operator&lt;&equals;&gt;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& x,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& y);
----

[.small]#link:#mrdocs-operator_3way-081[_» more&period;&period;&period;_]#

Performs a three&hyphen;way comparison between an Optional and std&colon;&colon;nullopt&period; Returns std&colon;&colon;strong&lowbar;ordering&colon;&colon;greater if engaged, std&colon;&colon;strong&lowbar;ordering&colon;&colon;equal if disengaged&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
std::strong&lowbar;ordering
link:#mrdocs-operator_3way-089[operator&lt;&equals;&gt;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& x,
    std::nullopt&lowbar;t rhs) noexcept;
----

[.small]#link:#mrdocs-operator_3way-089[_» more&period;&period;&period;_]#

Performs a three&hyphen;way comparison between an Optional and a value&period; If the Optional is engaged, compares its value to v&semi; otherwise, returns less&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isDerivedFromOptional&lt;U&gt;)
        &amp;&amp; requires &lcub; typename std&colon;&colon;compare&lowbar;three&lowbar;way&lowbar;result&lowbar;t&lt;T, U&gt;&semi; &rcub;
        &amp;&amp; std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;T, U&gt;
constexpr
std::compare&lowbar;three&lowbar;way&lowbar;result&lowbar;t&lt;T, U&gt;
link:#mrdocs-operator_3way-041[operator&lt;&equals;&gt;](
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& x,
    U const& v);
----

[.small]#link:#mrdocs-operator_3way-041[_» more&period;&period;&period;_]#

Three&hyphen;way comparison of two polymorphic objects&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Base&gt;
requires detail&colon;&colon;CanVisitCompare&lt;Base&gt;
auto
link:#mrdocs-operator_3way-0822[operator&lt;&equals;&gt;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_3way-0822[_» more&period;&period;&period;_]#

Three&hyphen;way comparison for any described type&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires DescribedComparable&lt;T&gt;
std::strong&lowbar;ordering
link:#mrdocs-operator_3way-0c[operator&lt;&equals;&gt;](
    T const& a,
    T const& b);
----

[.small]#link:#mrdocs-operator_3way-0c[_» more&period;&period;&period;_]#

Compare two polymorphic names by visitor dispatch&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-operator_3way-04d[operator&lt;&equals;&gt;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_3way-04d[_» more&period;&period;&period;_]#

Compare two polymorphic types by visitor dispatch&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-operator_3way-0b[operator&lt;&equals;&gt;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_3way-0b[_» more&period;&period;&period;_]#

Compare polymorphic template arguments&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-operator_3way-03[operator&lt;&equals;&gt;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_3way-03[_» more&period;&period;&period;_]#

Compare polymorphic template parameters&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
link:#mrdocs-operator_3way-0820[operator&lt;&equals;&gt;](
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& rhs);
----

[.small]#link:#mrdocs-operator_3way-0820[_» more&period;&period;&period;_]#

== Return Value

* The result of the three&hyphen;way comparison between the optionals or their values&period;
* The result of the three&hyphen;way comparison with `std&colon;&colon;nullopt`&period;
* The result of the three&hyphen;way comparison with the value&period;
* strong&lowbar;ordering comparing held objects&period;

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
auto
operator&lt;&equals;&gt;(
    link:#mrdocs-ArrayView-06[ArrayView] a,
    link:#mrdocs-ArrayView-06[ArrayView] b) noexcept
requires requires (const T&amp; x, const T&amp; y) &lcub; x &lt;&equals;&gt; y&semi; &rcub;;
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Performs a three&hyphen;way comparison between two Optional values&period; If both are engaged, compares their contained values&semi; otherwise, compares engagement state&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    std::three&lowbar;way&lowbar;comparable&lowbar;with&lt;T&gt; U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
std::compare&lowbar;three&lowbar;way&lowbar;result&lowbar;t&lt;T, U&gt;
operator&lt;&equals;&gt;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& x,
    link:#mrdocs-Optional-03[Optional&lt;U&gt;] const& y);
----

== Return Value

The result of the three&hyphen;way comparison between the optionals or their values&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *y*
| The right operand
|===

Performs a three&hyphen;way comparison between an Optional and std&colon;&colon;nullopt&period; Returns std&colon;&colon;strong&lowbar;ordering&colon;&colon;greater if engaged, std&colon;&colon;strong&lowbar;ordering&colon;&colon;equal if disengaged&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& x,
    std::nullopt&lowbar;t rhs) noexcept;
----

== Return Value

The result of the three&hyphen;way comparison with `std&colon;&colon;nullopt`&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *rhs*
| The right operand
|===

Performs a three&hyphen;way comparison between an Optional and a value&period; If the Optional is engaged, compares its value to v&semi; otherwise, returns less&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Optional&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    typename U&gt;
requires (!detail&colon;&colon;isDerivedFromOptional&lt;U&gt;)
        &amp;&amp; requires &lcub; typename std&colon;&colon;compare&lowbar;three&lowbar;way&lowbar;result&lowbar;t&lt;T, U&gt;&semi; &rcub;
        &amp;&amp; std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;T, U&gt;
constexpr
std::compare&lowbar;three&lowbar;way&lowbar;result&lowbar;t&lt;T, U&gt;
operator&lt;&equals;&gt;(
    link:#mrdocs-Optional-03[Optional&lt;T&gt;] const& x,
    U const& v);
----

== Return Value

The result of the three&hyphen;way comparison with the value&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *x*
| The left operand
| *v*
| The right operand
|===

Three&hyphen;way comparison of two polymorphic objects&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Polymorphic&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Base&gt;
requires detail&colon;&colon;CanVisitCompare&lt;Base&gt;
auto
operator&lt;&equals;&gt;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Base&gt;] const& rhs);
----

== Return Value

strong&lowbar;ordering comparing held objects&period;

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison for any described type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;CompareReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires DescribedComparable&lt;T&gt;
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    T const& a,
    T const& b);
----

== Description

Compares base classes first (in description order), then own members&period;

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *a*
| The left operand
| *b*
| The right operand
|===

Compare two polymorphic names by visitor dispatch&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Name&sol;NameBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Name&gt;] const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compare two polymorphic types by visitor dispatch&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Type&sol;TypeBase&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;Type&gt;] const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compare polymorphic template arguments&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TArg&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TArg&gt;] const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Compare polymorphic template parameters&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;TParam&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::strong&lowbar;ordering
operator&lt;&equals;&gt;(
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& lhs,
    link:#mrdocs-Polymorphic[Polymorphic&lt;TParam&gt;] const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols="1,4"]
|===
|Name|Description

| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Tag object to request unexpected construction&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mrdocs-unexpect_t[unexpect&lowbar;t] unexpect = unexpect&lcub;&rcub;;
----

Internal concept that matches “empty&hyphen;clear default&hyphen;constructible” types&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept ClearableContainerLike = requires &lcub;
        typename T&colon;&colon;value&lowbar;type&semi;
        typename T&colon;&colon;size&lowbar;type&semi;
        typename T&colon;&colon;difference&lowbar;type&semi;
        typename T&colon;&colon;reference&semi;
        typename T&colon;&colon;const&lowbar;reference&semi;
        typename T&colon;&colon;iterator&semi;
        typename T&colon;&colon;const&lowbar;iterator&semi;
    &rcub; &amp;&amp;
    &sol;&sol; size&lowbar;type should be integral for normal containers
    std&colon;&colon;is&lowbar;integral&lowbar;v&lt;typename T&colon;&colon;size&lowbar;type&gt; &amp;&amp;

    &sol;&sol; &hyphen;&hyphen;&hyphen;&hyphen; member begin&sol;end with expected iterator types &hyphen;&hyphen;&hyphen;&hyphen;
    requires(T&amp; t, const T&amp; ct) &lcub;
        &lcub; t&period;begin() &rcub;  &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;typename T&colon;&colon;iterator&gt;&semi;
        &lcub; t&period;end() &rcub;    &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;typename T&colon;&colon;iterator&gt;&semi;
        &lcub; ct&period;begin() &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;typename T&colon;&colon;const&lowbar;iterator&gt;&semi;
        &lcub; ct&period;end() &rcub;   &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;typename T&colon;&colon;const&lowbar;iterator&gt;&semi;
    &rcub; &amp;&amp;

    &sol;&sol; &hyphen;&hyphen;&hyphen;&hyphen; iterator “shape”&colon; deref and increment &hyphen;&hyphen;&hyphen;&hyphen;
    requires(T&amp; t, const T&amp; ct) &lcub;
        &lcub; &ast;t&period;begin() &rcub;  &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;typename T&colon;&colon;reference&gt;&semi;
        &lcub; &ast;ct&period;begin() &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;typename T&colon;&colon;const&lowbar;reference&gt;&semi;
        &lcub; &plus;&plus;std&colon;&colon;declval&lt;typename T&colon;&colon;iterator&amp;&gt;() &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;typename T&colon;&colon;iterator&amp;&gt;&semi;
    &rcub; &amp;&amp;

    &sol;&sol; &hyphen;&hyphen;&hyphen;&hyphen; size&sol;empty&sol;clear trio &hyphen;&hyphen;&hyphen;&hyphen;
    requires(T&amp; t, const T&amp; ct) &lcub;
        &lcub; ct&period;size() &rcub;  &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;typename T&colon;&colon;size&lowbar;type&gt;&semi;
        &lcub; ct&period;empty() &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;bool&gt;&semi;
        &lcub; t&period;clear() &rcub;  &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;void&gt;&semi;
    &rcub; &amp;&amp;

    &sol;&sol; &hyphen;&hyphen;&hyphen;&hyphen; default constructible (most std containers satisfy this) &hyphen;&hyphen;&hyphen;&hyphen;
    std&colon;&colon;default&lowbar;initializable&lt;T&gt;;
----

== Description

This captures the common case of containers and data structures that can be default&hyphen;constructed to empty, tested with &period;empty(), and reset with &period;clear()&period;

Common cases of such containers include std&colon;&colon;string, std&colon;&colon;vector, std&colon;&colon;optional, std&colon;&colon;unique&lowbar;ptr, std&colon;&colon;shared&lowbar;ptr, and many more&period;

True if T has described members (for comparison)&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;CompareReflectedType&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept DescribedComparable = requires &lcub;
    typename describe&colon;&colon;describe&lowbar;members&lt;T&gt;&semi;
&rcub;;
----

== Description

Semantically equivalent to `has&lowbar;describe&lowbar;members&lt;T&gt;&colon;&colon;value`, but checked via a requires&hyphen;expression so that MSVC treats it as a wholly distinct atomic constraint&period; This avoids an MSVC bug where a constrained operator&lt;&equals;&gt;() in the same namespace breaks constraint evaluation for the unrelated merge() template&period;

Concept to check if a type represents a DocComment node&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept DocCommentNode = std&colon;&colon;derived&lowbar;from&lt;T, doc&colon;&colon;Block&gt; &verbar;&verbar; std&colon;&colon;derived&lowbar;from&lt;T, doc&colon;&colon;Inline&gt;;
----

Types that can be traversed by DocComment helpers&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;DocComment&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept DocCommentNodeTraversable = DocCommentNode&lt;T&gt; &verbar;&verbar;
    std&colon;&colon;same&lowbar;as&lt;DocComment, T&gt; &verbar;&verbar;
    (detail&colon;&colon;IsPolymorphic&lt;T&gt; &amp;&amp; DocCommentNode&lt;typename T&colon;&colon;value&lowbar;type&gt;);
----

Concept to determine if there&apos;s a parse function for a type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Parse&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept HasParse = requires(
    char const&ast; first,
    char const&ast; last,
    T&amp; value)
&lcub;
    &lcub; parse(first, last, value) &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;ParseResult&gt;&semi;
&rcub;;
----

== Description

This concept checks if a type `T` has a parse function with the signature&colon;

[,cpp]
----
ParseResult
parse(
    char const* first,
    char const* last,
    T& value);
----
Concept that is satisfied when sentinel&lowbar;traits&lt;T&gt; declares a usable sentinel&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept HasSentinel = requires
    &lcub;
        &lcub; sentinel&lowbar;traits&lt;T&gt;&colon;&colon;sentinel() &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;T&gt;&semi;
        &lcub; sentinel&lowbar;traits&lt;T&gt;&colon;&colon;is&lowbar;sentinel(std&colon;&colon;declval&lt;const T&amp;&gt;()) &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;bool&gt;&semi;
    &rcub;;
----

A concept for types that have `Symbol` members&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Metadata&sol;Symbol&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class SymbolTy&gt;
concept SymbolParent = requires(SymbolTy const&amp; I)
&lcub;
    &lcub; allMembers(I) &rcub; &hyphen;&gt; range&lowbar;of&lt;SymbolID&gt;&semi;
&rcub;;
----

== Description

In most cases `T` is another `Symbol` type that has a `Members` member which is a range of `SymbolID` values&period;

Determine if a type is dereferenceable

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Concepts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept dereferenceable = requires(T const&amp; t)
&lcub;
    &lcub; static&lowbar;cast&lt;bool&gt;(t) &rcub;&semi;
    &lcub; &ast;t &rcub;&semi;
&rcub;;
----

== Description

This concept checks if a type can be dereferenced to a value it represents and converted to a boolean value that represents if the object is in a valid state&period;

Examples of such types are std&colon;&colon;optional, std&colon;&colon;unique&lowbar;ptr, std&colon;&colon;shared&lowbar;ptr, Polymorphic, pointers, etc&period;

Utility concept that returns true if T has a nullable&lowbar;traits specialization enabled&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Nullable&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept has&lowbar;nullable&lowbar;traits&lowbar;v = requires
    &lcub;
        &lcub; nullable&lowbar;traits&lt;T&gt;&colon;&colon;is&lowbar;null(std&colon;&colon;declval&lt;const T&amp;&gt;()) &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;bool&gt;&semi;
        &lcub; nullable&lowbar;traits&lt;T&gt;&colon;&colon;null() &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;T&gt;&semi;
        &lcub; nullable&lowbar;traits&lt;T&gt;&colon;&colon;make&lowbar;null(std&colon;&colon;declval&lt;T&amp;&gt;()) &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;void&gt;&semi;
    &rcub;;
----

Concept to check if a type is pair&hyphen;like

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Concepts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept pair&lowbar;like = tuple&lowbar;like&lt;T&gt; &amp;&amp;
    (std&colon;&colon;tuple&lowbar;size&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;T&gt;&gt;&colon;&colon;value &equals;&equals; 2);
----

== Description

This concept checks if a type is tuple&hyphen;like and has exactly two elements&period;

Examples of such types are std&colon;&colon;pair, std&colon;&colon;array with two elements, and user&hyphen;defined types that provide specializations for std&colon;&colon;tuple&lowbar;size and std&colon;&colon;tuple&lowbar;element with exactly two elements&period;

Concept to check if a type is representing a polymorphic storage

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Concepts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class Base&gt;
concept polymorphic&lowbar;storage&lowbar;for = requires(T const&amp; t)
&lcub;
    &lcub; &ast;t &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;Base const&amp;&gt;&semi;
    &lcub; t&period;operator&hyphen;&gt;() &rcub; &hyphen;&gt; std&colon;&colon;convertible&lowbar;to&lt;Base const&ast;&gt;&semi;
&rcub;;
----

== Description

This concept checks if a type is used to store derived objects of a base class&period;

Examples of such types are std&colon;&colon;unique&lowbar;ptr, std&colon;&colon;shared&lowbar;ptr, Polymorphic, etc&period;

The `get()` function might not always be available, but `operator&ast;` and `operator&hyphen;&gt;` should be available and return a reference to the Base class&period;

Concept to check if a type is a range of T

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Concepts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class Range,
    class T&gt;
concept range&lowbar;of = std&colon;&colon;ranges&colon;&colon;range&lt;Range&gt; &amp;&amp; std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;, T&gt;;
----

Concept to check if a range is a range of tuple&hyphen;like elements

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Concepts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Range&gt;
concept range&lowbar;of&lowbar;tuple&lowbar;like = std&colon;&colon;ranges&colon;&colon;range&lt;Range&gt; &amp;&amp; tuple&lowbar;like&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;Range&gt;&gt;;
----

== Description

This concept checks if a type is a range and all its elements are tuple&hyphen;like&period;

Examples of such types are std&colon;&colon;vector&lt;std&colon;&colon;tuple&lt;&period;&period;&period;&gt;&gt;, std&colon;&colon;list&lt;std&colon;&colon;pair&lt;&period;&period;&period;&gt;&gt;, and user&hyphen;defined types that provide specializations for std&colon;&colon;tuple&lowbar;size and std&colon;&colon;tuple&lowbar;element for their element type&period;

Concept to check if a type is tuple&hyphen;like

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Concepts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
concept tuple&lowbar;like = detail&colon;&colon;has&lowbar;tuple&lowbar;size&lt;T&gt;&colon;&colon;value &amp;&amp;
    detail&colon;&colon;all&lowbar;tuple&lowbar;elements&lt;T&gt;&colon;&colon;value;
----

== Description

This concept checks if a type has a specialization of std&colon;&colon;tuple&lowbar;size and std&colon;&colon;tuple&lowbar;element for all elements in the range &lsqb;0, N), where N is the value&rsqb; of std&colon;&colon;tuple&lowbar;size&period;

Examples of such types are std&colon;&colon;tuple, std&colon;&colon;pair, std&colon;&colon;array, and user&hyphen;defined types that provide specializations for std&colon;&colon;tuple&lowbar;size and std&colon;&colon;tuple&lowbar;element&period;

Deduce ArrayView element type from C&hyphen;style array&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    std::size&lowbar;t N&gt;
link:#mrdocs-ArrayView-06[ArrayView&lt;T&gt;](T const(&)[N]) -> link:#mrdocs-ArrayView-06[ArrayView&lt;T&gt;];
----

Deduce ArrayView element type from pointer and count&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;ArrayView&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
link:#mrdocs-ArrayView-06[ArrayView&lt;T&gt;](
    T const*,
    std::size&lowbar;t) -> link:#mrdocs-ArrayView-06[ArrayView&lt;T&gt;];
----

Class template argument deduction guide for Overload&period;

== Synopsis

Declared in `&lt;mrdocs&sol;ADT&sol;Overload&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class&period;&period;&period; Ts&gt;
link:#mrdocs-Overload-09[Overload&lt;Ts&period;&period;&period;&gt;](Ts&period;&period;&period;) -> link:#mrdocs-Overload-09[Overload&lt;Ts&period;&period;&period;&gt;];
----

== Description

Allows writing Overload&lcub;lambda1, lambda2, &period;&period;&period;&rcub; without specifying template parameters&period;

Deduction guide for RangeFor&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;RangeFor&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class Container&gt;
link:#mrdocs-RangeFor-0f[RangeFor&lt;Container&gt;](Container const&) -> link:#mrdocs-RangeFor-0f[RangeFor&lt;Container&gt;];
----

== Description

Deduction guide for RangeFor&period;

Deduction guide for ScopeExit&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class F&gt;
link:#mrdocs-ScopeExit-0a[ScopeExit&lt;F&gt;](F) -> link:#mrdocs-ScopeExit-0a[ScopeExit&lt;F&gt;];
----

Deduction guide for ScopeExitRestore taking a reference&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
link:#mrdocs-ScopeExitRestore-01[ScopeExitRestore&lt;T&gt;](T&) -> link:#mrdocs-ScopeExitRestore-01[ScopeExitRestore&lt;T&gt;];
----

Deduction guide for ScopeExitRestore taking a reference and new value&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;ScopeExit&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    std::convertible&lowbar;to&lt;T&gt; T2&gt;
link:#mrdocs-ScopeExitRestore-01[ScopeExitRestore&lt;T&gt;](
    T&,
    T2) -> link:#mrdocs-ScopeExitRestore-01[ScopeExitRestore&lt;T&gt;];
----

Deduction guide for Unexpected, forwarding the error type&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Expected&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class E&gt;
link:#mrdocs-Unexpected-0c[Unexpected&lt;E&gt;](E) -> link:#mrdocs-Unexpected-0c[Unexpected&lt;E&gt;];
----

True when binding `To` from `From` would require a temporary conversion&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Concepts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using std::reference&lowbar;constructs&lowbar;from&lowbar;temporary&lowbar;v;
----

Like `reference&lowbar;converts&lowbar;from&lowbar;temporary&lowbar;v`, but for construction&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;Concepts&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using std::reference&lowbar;converts&lowbar;from&lowbar;temporary&lowbar;v;
----

Alias to `std&colon;&colon;source&lowbar;location` when available&period;

== Synopsis

Declared in `&lt;mrdocs&sol;Support&sol;source&lowbar;location&period;hpp&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using std::source&lowbar;location;
----


[.small]#Created with https://www.mrdocs.com[MrDocs]#
