Skip to content

Commit

Permalink
P2231R1: some functions will be constexpr in C++23
Browse files Browse the repository at this point in the history
  • Loading branch information
wx257osn2 committed Jan 4, 2023
1 parent 31cfbe3 commit 6061559
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 8 deletions.
21 changes: 17 additions & 4 deletions reference/variant/variant/emplace.md
Expand Up @@ -7,18 +7,28 @@

```cpp
template <class T, class... Args>
T& emplace(Args&&... args); // (1)
T& emplace(Args&&... args); // (1) C++17
template <class T, class... Args>
constexpr T& emplace(Args&&... args); // (1) C++23

template <class T, class U, class... Args>
T& emplace(std::initializer_list<U> il, Args&&... args); // (2)
T& emplace(std::initializer_list<U> il, Args&&... args); // (2) C++17
template <class T, class U, class... Args>
constexpr T& emplace(std::initializer_list<U> il, Args&&... args); // (2) C++23

template <std::size_t I, class... Args>
variant_alternative_t<I, variant<Types...>>&
emplace(Args&&... args); // (3)
emplace(Args&&... args); // (3) C++17
template <std::size_t I, class... Args>
constexpr variant_alternative_t<I, variant<Types...>>&
emplace(Args&&... args); // (3) C++23

template <std::size_t I, class U, class... Args>
variant_alternative_t<I, variant<Types...>>&
emplace(std::initializer_list<U> il, Args&&... args); // (4)
emplace(std::initializer_list<U> il, Args&&... args); // (4) C++17
template <std::size_t I, class U, class... Args>
constexpr variant_alternative_t<I, variant<Types...>>&
emplace(std::initializer_list<U> il, Args&&... args); // (4) C++23
```
* variant_alternative_t[link /reference/variant/variant_alternative.md]
Expand Down Expand Up @@ -177,3 +187,6 @@ int main()
- [Clang](/implementation.md#clang): 4.0.1
- [GCC](/implementation.md#gcc): 7.3
- [Visual C++](/implementation.md#visual_cpp): ??

## 参照
- [P2231R1 Missing `constexpr` in `std::optional` and `std::variant`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2231r1.html)
5 changes: 4 additions & 1 deletion reference/variant/variant/op_assign.md
Expand Up @@ -10,7 +10,9 @@ constexpr variant& operator=(const variant& rhs); // (1)
constexpr variant& operator=(variant&& t) noexcept(see below); // (2)

template <class T>
variant& operator=(T&& rhs) noexcept(see below); // (3)
variant& operator=(T&& rhs) noexcept(see below); // (3) C++17
template <class T>
constexpr variant& operator=(T&& rhs) noexcept(see below); // (3) C++23
```

## 概要
Expand Down Expand Up @@ -193,3 +195,4 @@ int main()
## 参照
- [P0608R3 A sane variant converting constructor](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0608r3.html)
- [P0602R4 `variant` and `optional` should propagate copy/move triviality](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0602r4.html)
- [P2231R1 Missing `constexpr` in `std::optional` and `std::variant`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2231r1.html)
6 changes: 5 additions & 1 deletion reference/variant/variant/op_destructor.md
Expand Up @@ -6,7 +6,8 @@
* cpp17[meta cpp]

```cpp
~variant();
~variant(); // C++17
constexpr ~variant(); // C++23
```

## 概要
Expand Down Expand Up @@ -34,3 +35,6 @@

## 関連項目
- [`std::is_trivially_destructible`](/reference/type_traits/is_trivially_destructible.md)

## 参照
- [P2231R1 Missing `constexpr` in `std::optional` and `std::variant`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2231r1.html)
6 changes: 5 additions & 1 deletion reference/variant/variant/swap.md
Expand Up @@ -6,7 +6,8 @@
* cpp17[meta cpp]

```cpp
void swap(variant& rhs) noexcept(see below);
void swap(variant& rhs) noexcept(see below); // C++17
constexpr void swap(variant& rhs) noexcept(see below); // C++23
```
## 概要
Expand Down Expand Up @@ -69,3 +70,6 @@ int main()
- [Clang](/implementation.md#clang): 4.0.1
- [GCC](/implementation.md#gcc): 7.3
- [Visual C++](/implementation.md#visual_cpp): ??

## 参照
- [P2231R1 Missing `constexpr` in `std::optional` and `std::variant`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2231r1.html)
7 changes: 6 additions & 1 deletion reference/variant/variant/swap_free.md
Expand Up @@ -7,7 +7,9 @@
```cpp
namespace std {
template <class... Types>
void swap(variant<Types...>& x, variant<Types...>& y) noexcept(see below);
void swap(variant<Types...>& x, variant<Types...>& y) noexcept(see below); // C++17
template <class... Types>
constexpr void swap(variant<Types...>& x, variant<Types...>& y) noexcept(see below); // C++23
}
```
Expand Down Expand Up @@ -71,3 +73,6 @@ int main()
- [Clang](/implementation.md#clang): 4.0.1
- [GCC](/implementation.md#gcc): 7.3
- [Visual C++](/implementation.md#visual_cpp): ??

## 参照
- [P2231R1 Missing `constexpr` in `std::optional` and `std::variant`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2231r1.html)

0 comments on commit 6061559

Please sign in to comment.