こんにちは高木です。

普段、ちょっとしたC++のプログラムを書くときはmsys2上でMinGW-w64を使っています。最近、ようやくpacmanでインストールできるGCCのバージョンが11.2になりましたので、実験的にC++20のコードを書いてみることにしました。C++20になってもお題はTcl/Tkです。

いきなり難しいことはできませんので、今回は簡単なことだけにとどめます。それでも、C++20らしさを出すため、モジュールとchar8_t型のモジュールを使ってみることにしました。とりあえず、適当に書き殴ったコードを貼り付けます。

GCCでモジュールを使ったのは今回が初めてだったのですが、私が悪いのか、コンパイラのバグなのか、よくわからないエラーが出て悩まされました。具体的にはrun関数の引数としてstd::functionを渡してrunの中で呼び出すとbad_alloc例外が発生してしまいます。夜遅くに深追いするのも嫌だったので、今回はスクリプトを単なる文字列として渡すだけにしました。

TclのAPIに渡す文字列はchar型の文字列ですが、期待するエンコーディングはUTF-8です。C言語の場合はそれも仕方がないところですね。しかし、char型の文字列ではUTF-8に強制することはできませんので、char8_t型の文字列を渡して、run関数の中でchar const*にキャストしています。

モジュールについては正直もっと勉強しないといけませんね。それと、コンパイラやIDEの完成度がもっと上がらないといけないとも思います。

ちなみに今回のコードをコンパイルするときに使ったコマンドは以下の通りです。

近いうちに続編を書きたいと思いますので、あまり期待せずにお待ちください。