次回のC++ MIXは、2025/02/21(金) 19:00-21:00に開催します。 発表、ご参加お待ちしております。
C++ MIX #12 開催案内
レバテックLABにて情報発信とお金についての記事を書きました
2023年から、私が関わっている情報発信についてスポンサー募集を開始しましたが、そのあたりの考えについて記事を書かせていただきました。
持続的な情報発信、持続的なオープンソースの開発のための取り組みとして参考になれば幸いです。
レバテックLABにて技術書以外の本を紹介する記事を書きました
レバテックLABにてC++本の紹介記事を書かせていただきました
cpprefjp Tシャツを作ります!
2024年もCEDECでcpprefjp所属の方の発表があるので、それに合わせてcpprefjp Tシャツを作ります!
発表者だけでなく、cpprefjpのコントリビューターとスポンサーの方も、実費をいただければ発注します。
この機会に、cpprefjp Webサイトの編集に挑戦くださる方、スポンサーになってくださる方をお待ちしております。
スポンサーは、Open Collectiveで募集しています。スポンサーになっていただいた方は、1年間cpprefjp Webサイトのトップページに、ロゴ画像とリンクを掲載させていただきます。
Tシャツのデザインは以下になります。次の機会はあるかどうかわからないので、この機会にぜひ!
static_assertの比較値をエラーメッセージに表示する
C++のstatic_assert(A == B);
は表明失敗時にfalse
ということしかわからない場合があります。
GCC 12以上、Clang 16以上であれば、比較値をエラーメッセージに表示してくれます。
int main() { constexpr int a = 1; constexpr int b = 2; static_assert(a == b); }
GCC :
prog.cc: In function 'int main()': prog.cc:5:21: error: static assertion failed 5 | static_assert(a == b); | ~~^~~~ prog.cc:5:21: note: the comparison reduces to '(1 == 2)'
Clang :
prog.cc:5:5: error: static assertion failed due to requirement 'a == b' static_assert(a == b); ^ ~~~~~~ prog.cc:5:21: note: expression evaluates to '1 == 2' static_assert(a == b); ~~^~~~ 1 error generated.
それより古いコンパイラの場合は、クラスの非型テンプレートパラメータとして左辺、右辺の値をとり、そのなかでstatic_assert
することで、エラーメッセージにテンプレートパラメータを含むクラス名が表示されるので比較値がわかるようにできます。
template <auto A, auto B> struct static_assert_eq { static constexpr bool value = true; static_assert(A == B); }; int main() { constexpr int a = 1; constexpr int b = 2; static_assert(static_assert_eq<a, b>::value); }
メンバ変数宣言の文脈で使うような場合に、このような2段階のstatic_assert
が必要になります。
struct X { static constexpr int a = 1; static constexpr int b = 2; static_assert(static_assert_eq<a, b>::value); // 文脈的にstatic_assert_eq<a, b>{};はできない };
C++ MIX #9 の日程案内
3年ぶり!C++勉強会「C++ MIX」を開催します!
3年ぶりにC++勉強会を開催します!