Rokiのチラ裏

学生による学習のログ

C++

Divergence of the sum of the reciprocals of the primes

素数の逆数和が発散する事(式 )についてメモ。 素数の逆数和が発散することの証明には Harmonic series*1 が発散する事(式(2))を利用する 式 (2) の証明には、式変形、等式変形による不等式の評価を行う方法と、積分を用いた不等式評価など*2による方法があ…

zlib ラッパー

C++

少し以前に実装したものの話題となるが、zlib のラッパーを自作ライブラリの方に実装したものの、ブログに特に書いていなかったのでそのメモ。次のように利用できる。 テストは次のように、フリードキュメントである赤毛のアンのテキストを圧縮/解凍をし、そ…

TMP におけるバインドとその利用

C++

私の観測範囲内ではあまり有名で無いようなので発信。バインドとは C++ において Callable を満たすものに対し引数の束縛を行い、束縛済みの新たな Callable オブジェクトを生成する事を広義に言うが、これを TMP で行うにはどうすれば良いか。つまり例えば…

sha-2 の理論と実装

ふと国内でもある程度取り上げられている記事 Learn Blockchains by Building One – Hacker Noon を見て自分も何か実装してみるか〜と思ったのだが、私の観測範囲内では C++ の sha-2 ハッシュ関数がライブラリとしてあまりよく整備されていない気がしたので…

Searching and Manipulation of Parameter Packs

C++

2014 年頃に提案されていたペーパー、N4144, Searching and Manipulation of Parameter Packs をふと見かけて少し思うところがあったのでそれについてのチラ裏記事(特別新しい技術、発想ではないと思うのだが、何だかんだ同じような事をしている有名どころを…

Polymorphic Memory Resources

C++

先日策定された C++17 から追加された Polymorphic Memory Rerouces についてのメモ。同提案でも言及されている通りstd::allocatorは、型にそのアロケータ情報を含む事で利用されるため、コンパイル時にしか指定することが出来ず、結果として同じ型のオブジ…

implicitly capture の振る舞い

C++

以下の例が成り立つ。 const int i = 123; // #1 const float f = 123.f; // #2 []{ i; }(); // OK []{ f; }(); // ill-formed C++17 のラムダ式における reaching scope に関する記述 n4659/[expr.prim] 3, 7, n4659/[expr.prim.lambda.capture] 8 から引用…

Consistent/three-way comparison

C++

先日、米国のニューメキシコ州アルバカーキで開催された ISO C++ 委員会による国際会議にて C++20 に追加された Consistent comparison (p0515) についてのメモ。当エントリー内容は同提案書である p0515r2 に基づく*1。また、同提案の採択と共に導入される …

Synchronized Buffered Ostream

C++

先日、米国のニューメキシコ州アルバカーキで開催された ISO C++ 委員会による国際会議にて C++20 のドラフトに追加された Synchronized Buffered Ostream (p0053) についてのメモ。当エントリー内容は同提案書である p0053 に基づく。 C++ の一部のストリー…

Range-based for statements with initializer

C++

先日、米国のニューメキシコ州アルバカーキで開催された ISO C++ 委員会による国際会議にて C++20 のドラフトに追加された Range-based for statements with initializer (p0614) についてのメモ。当エントリー内容は同提案書である p0614 に基づく。C++17 …

Conditionals with Omitted Operands

GCC の Conditionals with Omitted Operands という拡張構文についてのメモ。x ? x : yというような Conditional operator を利用した記述を次のように記述する事ができる。 x ? : y 値は x が 0 でない限り x 、そうでない場合 y である。このような単純な…

ビルトインを使わずに任意の型のアラインメントを計算

C++

alignment_of は C++11 で標準化されており、殆どの場合はビルトイン関数を呼び出す実装となっているが、ふと Boost の実装を見るとなるほど〜という感じだったのでメモ。Boost による実装は今からかな〜り前からあるので、今更感はあるが。 // 以下の実装は…

P0532R0: On launder() 和訳

C++

std::launder については以前触れたが P0532R0: On launder() にとても分かりやすくまとめられていたので、個人的理解のためも含めて和訳してみる。 C++17では、C++14 の NB コメントの結果としてstd::launderを導入している:C++ FCD Comment Status それは…

C++17 structured bindings で [ ] が使われる事情

C++

C++17 から導入される structured bindings は、複数の変数をタプルのようなオブジェクトから初期化する事ができる言語機能であるが、同機能における宣言では { } ではなく [ ] が使われる。 そもそも structured bindings の元々の提案では宣言の構文におい…

Usage of void() in a comma-separated list

C++

,で連結されたリストにおけるvoid()がどのような意味を持つのか。 a(), void(), b(); これは単純にオーバーロードされたoperator ,の呼び出しを防ぎ、言語による sequencing guarantees を保証するためのものである。void型のパラメータを持ったオーバーロー…

aggregate, aggregate initialization まとめ

C++

C++ における aggregate と aggregate initialization についてのメモ。まずバージョンごとの aggregate の定義から。 aggregate C++03 aggregate とは*1 配列または 以下の要件を満たすクラスである ユーザー定義コンストラクタがない private または prote…

n4687 C++ extensions for Concepts

C++

このエントリは、ドラフト入りしたコンセプト仕様全体を網羅するためのものである。尚、このエントリは P0734R0 と同提案が drafting された n4687 に基づいており、注釈などで付けられるセクション名は特に指定のない限り n4687 を示しているものとする。 …

Can non-type template parameters in c++17 be decltype(auto)?

stackoverflow.com template <decltype(auto)> // Is this legal by standard? struct X {}; 結論: 合法である。 n4659 17.1 Template parameters [temp.param]/paragraph 4 に non-type template parameters が持てる型について示されている(下線部は強調)。 A non-type te</decltype(auto)>…

non-type template parameter におけるデータの受け渡しから TMP で実数を含む value computing を行う

C++

push してからしばらく経っているが記録もかねて。C++ の non-type template parameter には浮動小数点型などの数値を直接与えることはできない。しかし、型の内部に内包させて Expression templates のようにその値を取り出そうとした瞬間に型情報に紐付い…

stack overflow からの小ネタメモ #3

C++

前回。 stackoverflow.com C++98(03) ではstd::vectorの fill コンストラクタのプロトタイプに初期化子のデフォルト値があるが C++11 では削除されている。 C++03 – ISO 14882:2003 23.2.4.1 vector constructors, copy, and assignment [lib.vector.cons] …

C++ Standard Library Active Issues List Issue Status 和訳

C++ Standard Library Active Issues List の Issue Status の和訳。和訳されているのを見たことがなかったので、まとめておく。様々なステータスを通じてLWG移行に報告された問題で、解決への進捗状況を示す。通常、ほとんどの問題は次の段階を流れる。 New…

non-type template parameter のシーケンス生成におけるプレースホルダなど

C++

執筆時現在、C++1z(17)から追加される、non-type template parameter でのautoを使ってゴリゴリとコンパイルを行うと、コンパイル時間が型を指定している場合と比較して圧倒的に伸びる事があるので*1、この機能を使わずに C++14 までの機能だけで任意の型の…

brainf**k LLVM IR トランスパイラ(コンパイラ)ジェネレータ

以前 brainf**k インタプリタジェネレータのようなものを書いたが、LLVM IR を使ってオブジェクトファイル吐けたら良いかなと思ったので、取り敢えず作った。レキシカルアナライザ*1は、インタプリタで書いたものを呼び出して再利用している。 github.com こ…

C++ メタクラス提案の要約

元記事:http://www.fluentcpp.com/2017/08/04/metaclasses-cpp-summary/, Jonathan Boccara氏 [訳注 + メモ: Herb Sutter 氏による P0707R0 Metaclasses の提案文書の要約がまとまった記事。分かりやすく要約されていたため個人的理解のため翻訳 + メモ。 …

JPEG デコーダ書いた

以前 JPEG エンコーダをフルスクラッチで書いたが、今度は JPEG デコーダを書いて見た。該当するコミットはこちら。 github.com プロジェクト全体はこちら。 github.com 量子化テーブルの要素数を間違えて指定していて、少しハマった瞬間もあったが今回は割…

order of eval

Because my memory was a little vague, I learned about C++ order of eval again and wrote it in Japanese to my reference book. github.com The document of built version is here and for list of grounds and references of this document, consult …

Why an access to a volatile glvalue is considered a side effect by [intro.execution] ?

side-effect についてドラフトで再確認していたところ、その定義として “Reading an object designated by a volatile glvalue” という文面があったのでタイトルの内容をメモ。執筆時現在、side-effect については [intro.execution]/14/sentence-1 にて以下…

普段使いのコンパイル環境の整備

私は普段ちょっとしたコードに対してコンパイルを行う時、GCC と Clang のどちらかを使う。使うたびにコンパイルオプションを付与するのは面倒なので、これまでは単にオプションを含めた文字列をそのまま .zshrc のエイリアスとして設定していたのだが、あん…

Template non-type arguments によるコンパイル時四則演算パーサー

C++

書いて見た。 テスト。 テストの通り、無駄に C++11 に対応している。勿論の事だが C++14 では variable template が使えるし、C++1z(17) では型推論が効くのでそれによって使い勝手も良くなっている。尚、clang 4.0.0 でテストを行ったが、少し前の GCC と…

Template non-type arguments (Variadic templates) によるコンパイル時乱数生成

C++

Variadic templates でコンパイル時に乱数を生成してみた。現段階ではエンジンとして linear congruential, Xorshift, mersenne twister を、Discrete Uniform Distribution として uniform_int_distribution を実装してみた。ただし Template non-type argu…