[meta.reflection.operators]

# 21 Metaprogramming library [[meta]](./#meta)

## 21.4 Reflection [[meta.reflection]](meta.reflection#operators)

### 21.4.5 Operator representations [meta.reflection.operators]

[ð](#itemdecl:1)

`enum class [operators](#lib:operators "21.4.5 Operator representations [meta.reflection.operators]") {
  see below;
};
using enum operators;
`

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3566)

The enumeration type operators specifies
constants used to identify operators that can be overloaded,
with the meanings listed in Table [63](#tab:meta.reflection.operators "Table 63: Enum class operators")[.](#1.sentence-1)

The values of the constants are distinct[.](#1.sentence-2)

Table [63](#tab:meta.reflection.operators) — Enum class operators [[tab:meta.reflection.operators]](./tab:meta.reflection.operators)  

| [ð](#tab:meta.reflection.operators-row-1)<br>**Constant** | **Corresponding [*operator-function-id*](over.oper.general#nt:operator-function-id "12.4.1 General [over.oper.general]")** | **Operator symbol name** |
| --- | --- | --- |
| [ð](#tab:meta.reflection.operators-row-2)<br>op_new | operator new | new |
| [ð](#tab:meta.reflection.operators-row-3)<br>op_delete | operator delete | delete |
| [ð](#tab:meta.reflection.operators-row-4)<br>op_array_new | operator new[] | new[] |
| [ð](#tab:meta.reflection.operators-row-5)<br>op_array_delete | operator delete[] | delete[] |
| [ð](#tab:meta.reflection.operators-row-6)<br>op_co_await | operator co_await | co_await |
| [ð](#tab:meta.reflection.operators-row-7)<br>op_parentheses | operator() | () |
| [ð](#tab:meta.reflection.operators-row-8)<br>op_square_brackets | operator[] | [] |
| [ð](#tab:meta.reflection.operators-row-9)<br>op_arrow | operator-> | -> |
| [ð](#tab:meta.reflection.operators-row-10)<br>op_arrow_star | operator->* | ->* |
| [ð](#tab:meta.reflection.operators-row-11)<br>op_tilde | operator~ | ~ |
| [ð](#tab:meta.reflection.operators-row-12)<br>op_exclamation | operator! | ! |
| [ð](#tab:meta.reflection.operators-row-13)<br>op_plus | operator+ | + |
| [ð](#tab:meta.reflection.operators-row-14)<br>op_minus | operator- | - |
| [ð](#tab:meta.reflection.operators-row-15)<br>op_star | operator* | * |
| [ð](#tab:meta.reflection.operators-row-16)<br>op_slash | operator/ | / |
| [ð](#tab:meta.reflection.operators-row-17)<br>op_percent | operator% | % |
| [ð](#tab:meta.reflection.operators-row-18)<br>op_caret | operator^ | ^ |
| [ð](#tab:meta.reflection.operators-row-19)<br>op_ampersand | operator& | & |
| [ð](#tab:meta.reflection.operators-row-20)<br>op_equals | operator= | = |
| [ð](#tab:meta.reflection.operators-row-21)<br>op_pipe | operator| | | |
| [ð](#tab:meta.reflection.operators-row-22)<br>op_plus_equals | operator+= | += |
| [ð](#tab:meta.reflection.operators-row-23)<br>op_minus_equals | operator-= | -= |
| [ð](#tab:meta.reflection.operators-row-24)<br>op_star_equals | operator*= | *= |
| [ð](#tab:meta.reflection.operators-row-25)<br>op_slash_equals | operator/= | /= |
| [ð](#tab:meta.reflection.operators-row-26)<br>op_percent_equals | operator%= | %= |
| [ð](#tab:meta.reflection.operators-row-27)<br>op_caret_equals | operator^= | ^= |
| [ð](#tab:meta.reflection.operators-row-28)<br>op_ampersand_equals | operator&= | &= |
| [ð](#tab:meta.reflection.operators-row-29)<br>op_pipe_equals | operator|= | |= |
| [ð](#tab:meta.reflection.operators-row-30)<br>op_equals_equals | operator== | == |
| [ð](#tab:meta.reflection.operators-row-31)<br>op_exclamation_equals | operator!= | != |
| [ð](#tab:meta.reflection.operators-row-32)<br>op_less | operator< | < |
| [ð](#tab:meta.reflection.operators-row-33)<br>op_greater | operator> | > |
| [ð](#tab:meta.reflection.operators-row-34)<br>op_less_equals | operator<= | <= |
| [ð](#tab:meta.reflection.operators-row-35)<br>op_greater_equals | operator>= | >= |
| [ð](#tab:meta.reflection.operators-row-36)<br>op_spaceship | operator<=> | <=> |
| [ð](#tab:meta.reflection.operators-row-37)<br>op_ampersand_ampersand | operator&& | && |
| [ð](#tab:meta.reflection.operators-row-38)<br>op_pipe_pipe | operator|| | || |
| [ð](#tab:meta.reflection.operators-row-39)<br>op_less_less | operator<< | << |
| [ð](#tab:meta.reflection.operators-row-40)<br>op_greater_greater | operator>> | >> |
| [ð](#tab:meta.reflection.operators-row-41)<br>op_less_less_equals | operator<<= | <<= |
| [ð](#tab:meta.reflection.operators-row-42)<br>op_greater_greater_equals | operator>>= | >>= |
| [ð](#tab:meta.reflection.operators-row-43)<br>op_plus_plus | operator++ | ++ |
| [ð](#tab:meta.reflection.operators-row-44)<br>op_minus_minus | operator-- | -- |
| [ð](#tab:meta.reflection.operators-row-45)<br>op_comma | operator, | , |

[ð](#lib:operator_of)

`consteval operators operator_of(info r);
`

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3633)

*Returns*: The value of the enumerator from operators whose corresponding [*operator-function-id*](over.oper.general#nt:operator-function-id "12.4.1 General [over.oper.general]") is the unqualified name of the entity represented by r[.](#2.sentence-1)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3639)

*Throws*: meta​::​exception unlessr represents an operator function or operator function template[.](#3.sentence-1)

[ð](#lib:symbol_of)

`consteval string_view symbol_of(operators op);
consteval u8string_view u8symbol_of(operators op);
`

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3653)

*Returns*: A string_view or u8string_view containing the characters of the operator symbol name corresponding to op,
respectively encoded with the ordinary literal encoding or with UTF-8[.](#4.sentence-1)

[5](#5)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3659)

*Throws*: meta​::​exception unless
the value of op corresponds to one of the enumerators in operators[.](#5.sentence-1)
