c++2b

最近、 c++2b などの新しいめの機能を試している。 機能ごとの感想など。 コンパイラは、 gcc12, clang6, vc2022 あたり。

meson

cpp_std=c++2b を指定できない w .local/lib/python3.10/site-packages/mesonbuild/compilers/cpp.py を改造する必要があり、 初手からつまずく。 なお vc の場合は、 c++latest 指定が通るので使えてしまう。 使いわける必要があって不便。 meson-1.1 でまだ対応されていなかった。

std::format(時期尚早)

vc は使えそう。 clang-7? に来たら使ってみよう。 来るまでは stringstream で細々と。

std::expected

使えなくはないが、 and_then とかが来てなかった。 std::optional は、 and_then, or_else, transform 使えそう。

std::expected と std::optional の使いわけ

失敗しうる処理で、失敗の種類によってエラーハンドリングを分岐させる場合、 もしくは失敗原因のログが見たい場合に std::expected を使う。 それ以外は std::optional で十分。

concept

使えそう。

LanguageServer(clangd-16)

ヘッダーに対するフォールバックが c++11 になることがある。 発生条件が微妙によくわからない。 あとは concept とか使うとうまく動かなくなりがち。

charconv

vc は使えそう。 json のパースとかで float を使いたい。

module

ちょっと規模が大きくなるとコンパイルを通せなかった。大変そう。

coawait

あまり試していない。動くっぽい?

range

あまり試していない。動くっぽい?

c++20 以前の

std::optional, std::span, std::string_view, std::filesystem, std::u8string, std::u8string_view は使ってもよさそう。

集成型の初期化

win32 や d3d とか、 vulkan, openxr のような API の使い勝手がよくなる。 自作のちょっとした型の場合でも初期値の指定との合わせ技で、 コンストラクターよりこっちの方がよさそうと思えることがでてきた。

関数テンプレートの定数にlambda由来の関数ポインタのアドレスを渡す

vc でできたのだが怪しかった。