2023年から、私が関わっている情報発信についてスポンサー募集を開始しましたが、そのあたりの考えについて記事を書かせていただきました。
持続的な情報発信、持続的なオープンソースの開発のための取り組みとして参考になれば幸いです。
2023年から、私が関わっている情報発信についてスポンサー募集を開始しましたが、そのあたりの考えについて記事を書かせていただきました。
持続的な情報発信、持続的なオープンソースの開発のための取り組みとして参考になれば幸いです。
2024年もCEDECでcpprefjp所属の方の発表があるので、それに合わせてcpprefjp Tシャツを作ります!
発表者だけでなく、cpprefjpのコントリビューターとスポンサーの方も、実費をいただければ発注します。
この機会に、cpprefjp Webサイトの編集に挑戦くださる方、スポンサーになってくださる方をお待ちしております。
スポンサーは、Open Collectiveで募集しています。スポンサーになっていただいた方は、1年間cpprefjp Webサイトのトップページに、ロゴ画像とリンクを掲載させていただきます。
Tシャツのデザインは以下になります。次の機会はあるかどうかわからないので、この機会にぜひ!
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>{};はできない };
3年ぶりにC++勉強会を開催します!
C++日本語リファレンスを提供しているcpprefjpプロジェクトで、スポンサー募集をはじめました。
スポンサー募集のサービスとしては、Open Collectiveを使用しています。このサービスの特徴としては、手数料として10%ほど引かれますが、一般社団法人などを作らずとも団体口座をもつことができ、その口座の状況がオープンになるのでオープンソースのプロジェクトで使いやすいサービスとなっています。
私たちのWebサイトは広告をつけていないので、これまでは完全に無償で編集活動を行ってきました。しかしそれでは継続性に問題があるので、編集者に報酬を支払うことで継続的にC++の最新情報をみなさんに提供できるようにしていきます。
スポンサーになっていただいた方はロゴ画像とリンクをcpprefjpのトップページに記載させていただきます。
スポンサーになっていただいた方のOpen Collectiveページに連絡先を記載いただければロゴ画像とリンクについてこちらからご連絡させていただきますが、そうでなければOpen Collectiveの問い合わせフォームからご連絡いただくようよろしくお願いします。
Boost C++ Librariesのコンサルティング会社BoostProがなくなって以来、Boostはリーダー不在でふわふわした状態でした。
Boost.Beast作者のVinnie Falco氏が創設した新しい非営利団体The C++ Allianceでは、Boostを復権させるようBoostの基礎部分を刷新し、C++全般を支援していくことを主な目的としています。
この団体では、Boost.Asio作者のChristopher Kohlhoff氏を雇用し、フルタイムでオープンソース活動をできるようにしています。ほかにもスタッフエンジニアとして、Boostのリリースマネージャを長く続けているMarshall Clowも雇用しています。
2023年2月17日発売の『Software Design 2023年3月号』に書いたC++23記事で、以下のようにviews::enumerate
の例を紹介していますが、
for (auto x : enumerate(v)) { println("{} {}", x.index, x.value); }
x
の型は実際にはtuple<difference_type, T>
となる予定なので、index
/value
メンバ変数はもっていませんでした。このコードは間違いでした。
基本的に構造化束縛で使うことになりそうです。
for (auto [index, value] : enumerate(v)) { println("{} {}", index, value); }