[C++] std::arrayで各要素に対してリスト初期化したいとき

std::pairの配列の初期化で 集成体メンバを持つ集成体であること 参考文献 std::pairの配列の初期化で std::array<std::pair<int, int>, N>のような配列を初期化する場合、何も考えずに書くとこうなるかもしれません #include <array> #include <utility> int main() { // エラーになる std::array<std::pair<int, int></std::pair<int,></utility></array></std::pair<int,>…

[C++] std::atomicの待機・通知APIと条件変数

std::atomicの待機・通知API std::condition_variable 比較 シグナルセーフ? 参考文献 std::atomicの待機・通知API C++20ではstd::atomic(std::atomic_flag/std::atomic_ref)に待機と通知を行うメンバ関数が追加され、std::atomicオブジェクトによってス…

[C++]WG21月次提案文書を眺める(2024年04月)

文書の一覧 JTC1/SC22/WG21 - Papers 2024 mailing2024-04 全部で173本あります。 今月分は@Reputelessさんに一部手伝っていただきました、ありがとうございました! もくじ N4974 Wroclaw meeting information N4975 2024 WG21 admin telecon meetings N497…

[C++]定数式における未知の参照の利用の許可

C++23から、定数式における、非定数式な参照の読み取り(特にコピー)が定数式において許可されるようになります。 定数式における非定数式の参照 やりたいこととそうじゃないこと 定数式における参照そのものの読み取りの許可 欠陥報告 requires式の引数 st…

[C++] パラメータパックをprint/formatする

※ printfとその仲間たちに関する記事ではありません フォーマット文字列とパラメータパック コンパイル時生成 実行時フォーマットを使う std::tie() std::tupleのフォーマットオプション 参考文献 フォーマット文字列とパラメータパック std::format()および…

[C++]WG21月次提案文書を眺める(2024年02月)

文書の一覧 JTC1/SC22/WG21 - Papers 2024 mailing2024-02 全部で112本あります。 もくじ P0493R5 Atomic maximum/minimum P0843R10 inplace_vector P0876R15 fiber_context - fibers without scheduler P1061R7 Structured Bindings can introduce a Pack P…

[C++] std::arrayを初期化せずに初期化する

初期化せずに初期化する。一見矛盾しているようにしか思えない行いはしかし、生配列の場合は次のように初期化しながら初期化しないことによって行うことができます int main() { int array_uninit[5]; // 各要素は未初期化 int array_zeroinit[5]{}; // 各要…

[C++]WG21月次提案文書を眺める(2024年01月)

文書の一覧 JTC1/SC22/WG21 - Papers 2024 mailing2024-01 全部で22本あります。 もくじ P1255R11 A view of 0 or 1 elements: views::maybe P1255R12 A view of 0 or 1 elements: views::maybe P1709R5 Graph Library P2019R5 Thread attributes P2527R3 st…

[C++]WG21月次提案文書を眺める(2023年12月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-12 全部で125本あります。 もくじ N4966 St. Louis Meeting Invitation and Information N4967 WG21 2023-10 Admin telecon minutes N4970 WG21 2023-11 Kona Minutes of Meeting N4971 Working Draft,…

[C++] コンパイル時std::stringを実行時に持ち越す方法

コンパイル時動的メモリ確保の制約 コンパイル時SSO! 最大文字数 実装状況 実装について std::vectorの場合 参考文献 コンパイル時動的メモリ確保の制約 C++20でコンパイル時の動的メモリ確保が可能になり、それに伴ってstd::vectorとstd::stringが完全に定…

[C++]WG21月次提案文書を眺める(2023年10月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-10 全部で80本あります。 もくじ N4961 2024-03 Tokyo meeting information N4962 WG21 agenda: 6-11 November 2023, Kona, HI N4963 2023 WG21 admin telecon meetings, rev. 2 N4964 Working Draft, …

[C++]契約プログラミング機能のこれまでとこれから

この記事はC++アドベントカレンダー2023 25日目の記事です。ご参加の皆様お疲れ様でした! C++ Contracts C++20 Contracts 問題点とMVP(Minimum Viable Product) 最初のMVP仕様 関数の再宣言と契約注釈 引数の事後条件からの参照 契約条件式の副作用 C++26に…

[C++]UBとEB

この記事はC++アドベントカレンダー2023 11日目の記事です。 C++26に対して現在、一部のUBを置き換える概念としてEBというものが議論されています。 EBとは 規定 経緯 他のEB候補について 参考文献 EBとは EBはErroneous Behaviourの略称であり、EBはUB同様…

[C++]名前を必要としない変数のための変数名

C++26より、使用しない値に対する共通した変数名として_(U+005F、アンダースコア/アンダーバー)を言語サポート付きで使用できるようになります。 [[nodiscard]] auto f() -> int; auto g() -> std::tuple<int, double, std::string>; int main() { auto _ = f(); // ok、警告なし aut</int,>…

[C++]WG21月次提案文書を眺める(2023年09月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-09 全部で40本あります。 もくじ P0843R9 inplace_vector P1068R9 Vector API for random number generation P1255R10 A view of 0 or 1 elements: views::maybe P2264R5 Make assert() macro user fri…

[C++]WG21月次提案文書を眺める(2023年08月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-08 全部で44本あります。 もくじ N4956 Concurrency TS2 PDTS N4958 Working Draft, Programming Languages -- C++ N4959 Editors' Report, Programming Languages -- C++ N4960 Business Plan and Con…

[C++]WG21月次提案文書を眺める(2023年07月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-07 全部で106本あります。 もくじ N4955 WG21 2023-06 Admin telecon minutes N4957 WG21 February 2023 Minutes of Meeting P0260R6 C++ Concurrent Queues P0260R7 C++ Concurrent Queues P0543R3 Sa…

[C++] autoによるキャスト

C++23からauto(x)の形式のキャストが可能になります。 template<std::copy_constructible T> void f(T x) { T p = auto(x); // ok、C++23から } これに関連する仕様等のメモです。 prvalue値へのキャスト 細かい仕様の話 利点や用途 decay-copyとの違い 規格書における置き換え コンセプ</std::copy_constructible>…

[C++]C++23<ranges>のユーティリティ

C++23で追加された<ranges>関連の小さめのユーティリティをまとめておきます。ここには新しいファクトリ/アダプタやranges::toは含まれていません。ここで紹介するものは基本的にstd::ranges名前空間にありますが、名前空間指定を省略しています。 const_iterator_t/</ranges>…

[C++]WG21月次提案文書を眺める(2023年05月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-05 全部で122本あります。 一部の記事は次の方々に手伝っていただきました、ご協力ありがとうございました! @Reputelessさん もくじ N4946 2024-03 Tokyo meeting information N4947 INCITS C++/WG21 …

[C++] mdspanでインターリーブレイアウトを扱う

mdspanお勉強のメモです。ここでのサンプルコードは全てkokkos/mdspanを用いて実行しています。標準のstd::mdspanに準拠して実装されているのでおそらく挙動は変わらないでしょう。 インターリーブレイアウト mdspanのカスタマイズ レイアウトポリシー型の構…

[C++] 式のstatic type

式の静的型(static type)は参照型にならない、すなわち、式の静的型は値カテゴリの情報を含まない、あるいは、式の静的型と式の値カテゴリは直行する概念である、ということに関するメモです。 以下、規格書の文面はC++20規格と同等のドラフトであるN4861…

[C++] 例外送出からキャッチまでのあいだ

C++のthrow式はどんな型のオブジェクトであっても投げることができます。この是非は置いておいて、あるthrow式に対して適切にcatch節(例外ハンドラ)が用意されている場合に、呼び出される例外ハンドラは厳密にどのように決まるのでしょうか?なんとなくthr…

[C++]iter_const_reference_tの型の決定について

先日zennに投降した、views::as_constについての記事を書いているときに調べた、const_iteratorの要素型(参照型)の決定過程に関するメモです。 C++23 のviewを見る3 - As const view - zenn 以下、views::as_constに関しては知っているものとして説明しま…

[C++]WG21月次提案文書を眺める(2023年04月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-04 SG22のWG14からのものを除いて、全部で41本あります。 N4940 WG21 2022-11 Kona Minutes of Meeting V2 N4941 INCITS C++/WG21 Agenda: 6-11 February 2023, Issaquah, WA USA N4942 WG21 2023-01 A…

[C++]WG21月次提案文書を眺める(2023年02月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-02 SG22のWG14からのものを除いて、全部で102本あります。 P0290R3 apply() for synchronized_value P0290R4 apply() for synchronized_value P0447R21 Introduction of std::hive to the standard lib…

[C++] constexpr ifとコンセプトと短絡評価と

constexpr if(構文としてはif constexpr)の条件にはboolに変換可能な任意の定数式を使用できます。複数の条件によって分岐させたい場合、自然に&&もしくは||によって複数の条件式をつなげることになるでしょう。そしてその場合、条件式には左から右への評…

[C++]WG21月次提案文書を眺める(2023年01月)

文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2023-01 SG22のWG14からのものを除いて、全部で84本あります。 N4928 Working Draft, Standard for Programming Language C++ N4929 Editors' Report - Programming Languages - C++ N4933 WG21 November 20…

[C++]暗黙ムーブの副作用による安全性

C++23から、左辺値参照を返す関数においてローカル変数を直接返すケースがコンパイルエラーとなるようになります。 int& f() { int n = 10; return n; // ng } int main() { int& r = f(); } [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ これは意図された振る舞いである…

[C++]P0588R1を紐解く

C++20にひっそりと採択されているP0588R1 Simplifying implicit lambda captureという提案は、3度見したくらいでは何をしているのか、何がしたいのかさっぱりわかりません。一体これはなんなのでしょうか・・・ P0588R1のやっていること 言葉の定義 エンティ…