最近、 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 でできたのだが怪しかった。