File tree Expand file tree Collapse file tree 1 file changed +7
-7
lines changed
Expand file tree Collapse file tree 1 file changed +7
-7
lines changed Original file line number Diff line number Diff line change @@ -24,10 +24,10 @@ constexpr int g(int x) { return f(x); } // error! fはいかなるxについて
2424
2525しかし、多くの標準ライブラリが`constexpr`対応を進めていくようになり、状況が変化した。
2626
27- 例えば、`std::optional`の`reset`メンバメソッドが`constexpr`に対応するのはC++20以降である 。
27+ 例えば、`std::optional`の`reset`メンバメソッドが`constexpr`に対応するのはC++23以降である 。
2828これは`std::optional`の内部実装が`union`のアクティブメンバを更新しているからであり、[これを定数式内で実行するにはC++20を待たねばならなかった](https://cpprefjp.github.io/lang/cpp20/changing_the_active_member_of_a_union_inside_constexpr.html)。
2929
30- よって、以下のコードはC++17では不適格だが、C++20では正しいコードとなる 。
30+ よって、以下のコードはC++17では不適格だが、C++23では正しいコードとなる 。
3131
3232```cpp
3333template<typename T>
@@ -38,17 +38,17 @@ constexpr void f(std::optional<T>& opt)
3838```
3939
4040これを正しく記述するには、` constexpr ` 指定をするかどうかをマクロで変更しなければならない。
41- 例えばC++20から ` constexpr ` になる関数群に対して以下のようなマクロを使うか、
41+ 例えばC++23から ` constexpr ` になる関数群に対して以下のようなマクロを使うか、
4242
4343``` cpp
44- #if __cplusplus >= 202002L
45- # define MYLIB_CXX20_CONSTEXPR constexpr
44+ #if __cplusplus >= 202300L // 具体的な値は未定
45+ # define MYLIB_CXX23_CONSTEXPR constexpr
4646#else
47- # define MYLIB_CXX20_CONSTEXPR
47+ # define MYLIB_CXX23_CONSTEXPR
4848#endif
4949
5050template <typename T>
51- MYLIB_CXX20_CONSTEXPR void f (std::optional<T >& opt)
51+ MYLIB_CXX23_CONSTEXPR void f (std::optional<T >& opt)
5252{
5353 opt.reset();
5454}
You can’t perform that action at this time.
0 commit comments