2020-01-01から1年間の記事一覧

[C++] C++17イテレータ <=> C++20イテレータ != 0

これはC++ Advent Calendar 2020の24日めの記事です(大遅刻です、すいません)。 前回と前々回でC++20のイテレータは一味も二味も違うぜ!という事を語ったわけですが、具体的にどう違うのかを見てみようと思います。 iterator C++17 C++20 差異 input iter…

[C++]C++20からのiterator_traits事情

これはC++ Advent Calendar 2020の14日めの記事です。 C++20のiterator_traitsには、C++17以前のコードに対する互換レイヤとしての複雑な役割が与えられるようになります。従って、C++20からのイテレータ情報の問い合わせには前回説明したものを利用するよう…

[C++] C++20からのイテレータの素行調査方法

これはC++ Advent Calendar 2020の11日めの記事です。 これまでiterator_traitsを介して取得していたイテレータ情報は、C++20からはより簡易な手段を介して取得できるようになります。 特に、C++20以降はiterator_traitsを使わずにこれらのものを利用するこ…

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

文書の一覧 JTC1/SC22/WG21 - Papers 2020 mailing2020-11 全部で42本あります。 採択された文書 P0943R6 Support C atomics in C++ P1787R6 Declarations and where to find them その他文書 N4869 WG21 Pre-Autumn 2020 telecon minutes N4871 WG21 Pre-Au…

[C++]inline名前空間の使途

inline名前空間はC++11から追加された機能で、その中にあるものは透過的に(名前空間がないかのように)アクセスすることができます。一見使いどころがなく見られがちですが、うまく使えばとても便利に活用することができます。 1. using namespaceの範囲を…

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

文書の一覧 www.open-std.org 提案文書で採択されたものはありません。全部で35本あります。 N4863 Agenda for Fall Virtual WG21/PL22.16 Meeting N4864 WG21 virtual meeting: Autumn 2020 N4865 Response to Editorial Comments: ISO/IEC DIS 14882, Prog…

[C++]std::exchangeによるmoveしてリセットするイディオムの御紹介

2020年10月公開分の提案文書を眺めていたら良さげなものを見つけたので宣伝です。そのため、この記事の内容は次の提案文書を元にしています。 P2226R0 A function template to move from an object and reset it to its default constructed state もくじ mo…

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

文書の一覧 www.open-std.org 提案文書で採択されたものはありません。全部で32本あります。 P0288R7 : any_invocable P0443R14 : A Unified Executors Proposal for C++ P0881R7 : A Proposal to add stacktrace library P0958R2 : Networking TS changes t…

[C++]モジュールにおける所有権モデル

モジュールにおける所有権とは、名前付きモジュールに属しているエンティティの名前に関する所有権の事で、次のようなコードがどう振舞うかを決定するものです。 /// moduleA.ixx export module moduleA; export int munge(int a, int b) { return a + b; } …

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

文書の一覧 www.open-std.org 提案文書で採択されたものはありません。全部で21本あります。 N4862 : Business Plan and Convener's Report P0288R6 : any_invocable P0881R6 : A Proposal to add stacktrace library P1787R5 : Declarations and where to f…

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

文書の一覧 www.open-std.org 提案文書で採択されたものはありません。全部で34本あります。 P1068R4 : Vector API for random number generation P1184R2 : A Module Mapper P1272R3 : Byteswapping for fun&&nuf P1478R4 : Byte-wise atomic memcpy P1642R…

Github Actions上のDockerコンテナ上のGCCの最新版でテストを走らせたかった

Github Actionsで用意されているubuntu 20.04環境に用意されているソフトウェアを見るとGCCは9.3が用意されています(2020年7月24日現在)。しかしGCC9.3はC++20対応がほぼなされていないので使い物になりません(個人の感想です)。いつかは追加されるでし…

[C++]Forwarding referenceとコンセプト定義

コンセプトを定義するとき、あるいはrequires節で制約式を書くとき、はたまたrequires式でローカルパラメータを使用するとき、その型パラメータがForwarding referenceから来ているものだと使用する際に少し迷う事があります。 // operator*による間接参照が…

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

文書の一覧 www.open-std.org 提案文書で採択されたものはありません。全部で28本あります。 P1401R3 : Narrowing contextual conversions to bool P1450R3 : Enriching type modification traits P1467R4 : Extended floating-point types and standard nam…

[C++]カスタマイゼーションポイントオブジェクト(CPO)概論

C++20以降の必須教養となるであろうカスタマイゼーションポイントオブジェクトですが、その利便性の高さとは裏腹に理解が難しいものでもあります。これはその理解の一助となるべく私の頭の中の理解を書き出したメモ帳です。 C++17までのカスタマイゼーション…

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

文書の一覧 www.open-std.org 提案文書で採択されたものはありません。全部で29本あります。 P0493R1 : Atomic maximum/minimum P0870R3 : A proposal for a type trait to detect narrowing conversions P1679R2 : String Contains function P1841R1 : Word…

[翻訳]P0443R13 A Unified Executors Proposal for C++

A Unified Executors Proposal for C++ | P0443R13 この記事は↑の一部を和訳しただけです。私には英語が読めないので怪しい訳を信用しないでください。 怪しい記述や間違いを見つけたらこの記事のMarkdownソースかコメント欄からお知らせください。 1 Design…

[C++]モジュールとプリプロセス

C++20より使用可能になるはずのモジュールは3つの新しいキーワードを用いて記述されますが、それらのキーワードは必ずしも予約語ではなく、コンパイラによる涙ぐましい努力によって特殊な扱われ方をしています。 ディレクティブ導入トークン モジュールディ…

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

C++標準化委員会の論文(提案文書)公開がコロナウィルスの影響もあって月1になり量がお手頃になったので、4/20公開の提案文書をさらっと見てみます。 文書の一覧 www.open-std.org 提案文書で採択されたものは今回はありません。 N4858 : Disposition of Co…

[C++]to_chars()とfrom_chars()ってはやいの??

<charconv>ヘッダはC++17から導入されたヘッダで、ロケール非依存、動的確保なし、例外なげない、などを謳ういいことづくめで高速な文字列⇄数値変換を謳う関数が提供されています。現在フルで実装しているのはMSVCだけですが、実際速いってどのくらいなの?既存の手段</charconv>…

[C++]コンソール出力にchar8_t文字列を出力したい!

非Windows Windowsのコンソール出力と標準出力 標準IOストリームのモード コンソールのコードページ スクリーンバッファ 1. 素直に変換してstd::coutする 1.2 UTF-16に変換してstd::wcoutする 2. UTF-16に変換してWriteConsoleW()する 3. 標準出力をユニコー…

[C++]コンセプトの無言のお願い事

等しさの保持(equality preservation) 安定(stable) 定義域(domain) 制約式の引数に対しての制約 requires式とrequires節 暗黙的な式のバリエーション(implicit expression variations) コンセプトのモデルとなるために 参考文献 謝辞 等しさの保持…

[C#/.Net Core] .Net Core(3.1)でSystem.Drawingをクロスプラットフォームに利用する

System.Drawing.Commonパッケージ System.Drawing名前空間には画像を扱う上で便利なものが含まれていますが、そのままだとドキュメントに見えるものの半分も利用できません。Windowsで開発していてもです・・・ これは.Net Frameworkから引き継いだもので、S…

[C++] メンバ関数のCV/参照修飾

メンバ関数の修飾 メンバ関数にはCV修飾と参照修飾を行えます。CV修飾は呼び出すオブジェクトがconst/volatileであるときに優先して選択されるようになり、参照修飾は呼び出すオブジェクトの状態が左辺値/右辺値であるときに優先して選択されるようになりま…

[C++]std::common_referenceの概念

C++20より追加されたstd::common_reference<T, U>は型T, U両方から変換可能な共通の参照型を求めるメタ関数です。ただしその結果型は必ずしも参照型ではなかったりします。std::common_typeとの差など、存在理由がよく分からない物でもあります・・・ 同じ事を思う</t,>…

[C++]モジュールインポート時の動的初期化順序

ほぼほぼ、2019年12月のBelfast会議で採択されたP1874R1 Dynamic Initialization Order of Non-Local Variables in Modulesの和訳しただけです。 モジュールについては以前の記事でもご参照ください。 onihusube.hatenablog.com P1874R1前夜の大問題 P1874R1…

[C++]特殊化?実体化??インスタンス化???明示的????部分的?????

C++のテンプレートの用語は日本語に優しくなく、似た言葉がこんがらがってよく分からなくなります。分からないのでメモしておきます。 特殊化(specialization) 明示的特殊化(explicit specialization) 完全特殊化 部分特殊化(partial specialization) …

[C++] 集成体のテンプレート引数推論

C++17のテンプレートな集成体とテンプレートパラメータ推論 C++17から、クラステンプレートのコンストラクタ引数からそのテンプレート引数を推論出来るようになりました。これによって、クラステンプレートを扱う際にとても便利に書けます。 // std::vector<int> </int>…