C++

Recursive Function Template Instantiation and New Function Declarator Syntax

C++

以下のコードは ill-formed である.その理由を述べなさい. void f() {} template<typename T, typename... Types> auto f(T &&, Types &&... args) -> decltype(f(args...)) { return f(args...); } int main() { f(0, 1); }</typename>

Defining Scoped Enumerations with Human-readable Outputs

出力がちょっとだけホモ・サピエンスに優しい scoped enumeration を定義するだけのカンタンなマクロを作ったような気がする. GCC 4.6.1 -std=c++0x で動いたような気もする. #include <iostream> // 第1引数に enumeration の identifier (enum-name) を // 第2引数</iostream>…

Boost.Build @ Linux + GCC + GNU Linker

Boost.Build において,各ターゲットの種類に対してビルドプロパティの値が具体的にどのようなコマンドラインオプションに対応するかを, Linux + GCC + GNU Linker の環境において例示するという,私以外の誰も得をしないしそもそも他に理解できる人が居る…

C++0x の std::unique_lock - std::defer_lock と std::adopt_lock でちょっと高度なロック管理

http://cpplover.blogspot.com/2011/07/mutex.html C++ のソースコード中に「途中のreturnや例外に気をつけること」などといったコメントはあってはならないため,補足. // 排他的にアクセスするリソース class exclusive_resource { public : std::vector<int> </int>…

C++0x Memory Model 第1回 - 1.9 Program execution

前回の記事:C++0x Memory Model 第0回 - メモリモデルとは何か以下では, C++0x プログラミング言語の標準規格として一貫して N3225 を参照しています.文中で (1.9/12) などという表現が出てきた場合は N3225 における条項を指しています. 太字かつ斜字体…

C++0x Memory Model 第0回 - メモリモデルとは何か

私は,スカートを履いた女の子に,スカートを履いたままぱんつを脱いで,脱ぎ終わったら右手を挙げるようにと,そう命令した.私は,その子が右手を挙げたのを確かに見た.だが,その子のスカートをめくってみたらぱんつはまだそこにあったのだ! - http://t…

任意の expression に透過的に hook を仕掛けるようなマクロが書けるのではありませぬか?

以下のコードでやっていることの説明. EXCEPTION_HOOK((expr))と書いておけば, (expr) という C++ の式を実行したら急に例外が来たので……というときに, call stack のようなもので殴られた跡 (この hook が仕掛けられている場所に関する情報) を boost::e…

GCC 4.5 の半分は C++03 へのやさしさでできています

When printing the name of a class template specialization, G++ will now omit any template arguments which match the default template argument for that parameter. This behavior (and the pretty-printing of function template specializations a…

A*

http://okajima.air-nifty.com/b/2010/01/post-abc6.html 余計なことして遊んでたらマジで制限時間ギリギリの3時間かかってしまった...orz しかも色々はしょっているわ,出力に S, G が出てないわ... A* で discover されなかったノードに対する情報を…

ぷろあくた\(^o^)/ ぱ〜とすりぃ〜

Boost.Asio はもうちょっと↓みたいに(ry

ぷろあくた\(^o^)/ ぱ〜とつぅ〜

Boost.Asio はもうちょっと↓みたいに proactor な部分で遊ぶのを前面に押し出してほしい気がします的なっていうかこれさっきゆった. 要 Boost 1.36.0 以上.少なくとも Windows Vista 64bit (ただし WIN32 の configuration でビルド) + MSVC 8.0 では動い…

ぷろあくた\(^o^)/

Boost.Asio はもうちょっと↓みたいに proactor な部分で遊ぶのを前面に押し出してほしい気がします的な. 要 Boost 1.36.0 以上.少なくとも Windows Vista 64bit (ただし WIN32 の configuration でビルド) + MSVC 8.0 では動いたような気がする.改行をコ…

それ (dynamic duck typing) C++ でできるよ +α

C++

http://d.hatena.ne.jp/gnarl/20080801/1217523822 元のエントリが静的なものと動的なものを比較していますので,それに対する批判としてはまったく正当なものなのでそこには異論はありません.ですが,蛇足として, static duck typing が与えられればそこ…

X / _ / X < "むぅぶせまんちくす!";

あああああぁぁぁぁぁもおおおおおちょおおおおお気に入らねえええええぇぇぇぇぇ!!!!! 以下のコードは GCC 4.3.0 以降で -std=c++0x オプションを指定しないとコンパイルが通りません. #include <string> #include <iostream> template<typename T> struct lr_impl{ static int cons</typename></iostream></string>…

Boost 1.35.0 のビルドのバッドノウハウ

Boost 1.35.0 になってビルドの方法が変わってて,単に bjam 動かしただけでは以下の設定しかビルドされにゃい リリースビルドで マルチスレッドで 共有ライブラリで ランタイムを動的リンクする ./configure && make install も同じっぽ? autolink に頼っ…

いや,そんなことよりも lambda expression + typeof

今一番試してみたいのが lambda expression + typeof.もうこれはヤングなバカに受けナウ間違いなし.

Multiple Placement Construction

http://d.hatena.ne.jp/faith_and_brave/20080526/1211793189 >曲芸的なアプローチ というのはつまりヒロイン追加のコンシューマ版が発売されて,それがPCに逆移植されて,なおかつクリスマスやらサマーバケーションやらことあるごとに……じゃなかった.今の…

文字列は文字列の連結という2項演算に関して semigroup ですよ.あー,いや, monoid か……なんていちいち考えるっぽ?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2645.pdf いや,こういう最も原初的で代数的な concept から組み立てあげる方向性は,まったく間違ってはいないし, STL (によらず汎用プログラミング全般) 的にいって王道的進化だとは思うし,非…

structual よりも non-intrusive だと思うにゃー

http://www.kmonos.net/wlog/85.html#_0905080505 う〜ん, structural かどうかではなくて non-intrusive かどうかっていう軸の方が重要だと思うんですけれどどうなんでしょうかねー. non-intrusive という言葉を明快に定義してくれている書籍なりサイトな…

なんで requirement に関する推論が欲しくなったかというと,以下のようなのを見てたらうにゅーんっていう. たとえば, // とりあえず細かいことはおいといて,「型 T はデフォルトコンストラクタを持ってる」という制約の記述だと思って! concept Default…

そういえば,ある汎用アルゴリズム (関数テンプレート) の実装が与えられたときに,その汎用アルゴリズムの requirement 項に関する推論機構が欲しいと誰かが (俺かぁ!) ほざいてた気がするけれど, requirement に記述した制約 (インタフェイス) のみを使…

O(1) か O(log N) かよりも leading coefficient の大小のほうが実用的には重要だったりするかも知れない昨今,皆様いかがお過ごしでしょうか?それはさておきまして誰か splice の使い方を列挙しまくって std::list の不憫な立場をなんとかしてやってくだし…

concept via type class

Haskell に type class が導入されている motivation についてまとまってるサイトにゃいかにゃー. Haskell の type class を通して C++ の concept を見てみたいの会.あと, C++0x の concept で functional dependency が手軽に扱えそうか/有用そうかどう…

concept-based overload の使い道はそれこそいくらでも……

http://d.hatena.ne.jp/NyaRuRu/20080328/p1 (C++[0x] の言葉でいうところの) concept-based overload と,関数テンプレートの partial ordering が混ざった話だけれど, concept-based overload に関しては >まあ使い道がそんなに沢山あるかというとそこは…

Re: std::reference_closure の存在意義

昨日のk.inabaさんのコメントにいったん納得しかけたけれど void funcWithCallback(std::reference_closure<int(int)> const &f); // 定義は別のバイナリにある void g() { int i = 42; funcWithCallback([&](int j){ return i * j; }); } これが std::reference_closu</int(int)>…

"Design Patterns in C++," articles in TopCoder

C++

http://www.topcoder.com/tc?module=Static&d1=features&d2=100206 http://www.topcoder.com/tc?module=Static&d1=features&d2=100906 これは良い article.ただ, "non-intrusive" とか "type erasure" とかいう keyword を含んだ article なら,どんな art…

generic programming の文脈では C++ のクラスは限定的に open だよ?

C++

C++ において class は open か closed か.自分は「generic programming の文脈では限定的ながら open であるといってしかるべき」と思うのだけれど.思っただけ. C++ の class には associated namespace というものがあって,そこには class の public …

シグネチャに対するパタンマッチぐらいはないと AOP とはいえないんじゃなイカ?

http://d.hatena.ne.jp/Cryolite/20080318#p2 concept maps で追加・置換できるのは良いけれど,少なくともシグネチャ (関数名含む) に関するパタンマッチ的なことぐらいはできないと AOP とはいえないでゲソ. っていうか, identifier をメタプログラミン…

std::reference_closure の存在意義がやっぱりよくわからにゃいにゃー

lambda expression が std::reference_closure という形で実装可能なのは郵便はみがきさんが書いていらっしゃるとおりですけれど, std::reference_closure の形式よる実装が可能 (つまりシグネチャが同一の lambda expression は同じ型を持つ) ということは…

参照経由のみで環境にアクセスする lambda expression がなんで reference_closure 型にならなあかんねん

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2550.pdf ローカルの変数の値を全部参照で読み書きするならば, 8 If every name in the effective capture set is preceded by &, F is publicly derived from std::reference_closure (20.5.17)…