C++0x

最新ドラフト通読してたら std::vector (っていうか Sequence) のインタフェースが地味に進化してることにいまさら気が付いて驚いてる人ここに見参. move 対応とか data とか cbegin/cend らへんに気を取られてたーよ. namespace std { template <class T, class Allocator = allocator<T> > class </class>…

↑↑ >3000個の int な std::set だと, std::sort では比較演算が支配的になって いや, std::set で,入っている値が random なら,1,2回の

↑あいや,ちょっと待たれよ.んなことよりなんで destructor も速くなってんのよ? move のおかげで memory fragmentation が抑止されたせいっぽ?

STL Benchmarks with Move Semantics

おー,このベンチマーク比較知らなかった. http://home.twcny.rr.com/hinnant/cpp_extensions/STL_benchmarks.html std::sort/std::rotate がなんで1000倍のオーダーで高速化されとるん? libstdc++ の std::sort/std::rotate って呼ばれる std::swap がコ…

おぉーはぁーよぉー(^o^) (「〜リポD飲んで寝よう.」のエントリが執筆されてから,著者がリポDを飲み,布団の中に入ってから,何かを思いついて,布団を抜け出し, PC の前に着席し,本エントリの執筆が開始される,この間たったの5分) 「polymorphic lam…

↑そんな感想いらねー. polymorphic lambda は concept check と相性が悪いから難しいねぇ,というところまで理解したような気がするからリポD飲んで寝よう.

<= @ N2529

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2529.pdf lambda-introducer: < > < & > <= > < = >↑の3番目のを見て,ちょっとアホだなーとか思ったりなんかしてませんったら!

Range-based For-loop

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2394.html 前々からずっと思っているんですが, for という言語組み込みの機能 (制御構文) が Range concept という (どちらかといえば) ライブラリレベルの仕様に依存するのって,個人的にはあー…

std::tuple で converting constructor 呼んでるつもりが forwarding constructor 呼ばれてうげー

http://tinyurl.com/2gmb6e うげー.

右辺値参照型と左辺値参照型

右辺値参照型と左辺値参照型は, 異なった型として扱われるのと, 関数の戻り値型 (とキャストの型) に指定された場合に,その関数の呼び出し結果が右辺値として扱われるか左辺値として扱われるかが異なるのと, 参照への参照をただの参照に変換する規則 (re…

lambda@C++0x - 値か参照か,それが問題だ

http://shinh.skr.jp/m/?date=20080213#p02 今の lambda@C++0x の提案は bind を作成する + bind に渡す関数の定義を inline に書ける,という理解でだいたいよいと思う.ので,「必要なものだけ boost::bind かそれに類するものにぶちこんで持ち運ぶ」のは…

polymorphic lambda があるとうれしいというのは

Boost.Lambda 使った以下のようなコードが map<string, int> m; map<string, int>::const_iterator ans = find_if(m.begin(), m.end(), lambda::_1.second == 42); こう,なんていうか,直感的な意図通り素直に通ってくれたらうれしいよねー,っていうのと大体同じ. (上のコードはもち</string,></string,>…

local class の linkage 変えようって話あったなぁ

lambda 周りの話の補助的な話として local class の linkage 変えようって話はあったにゃー. (lambda の話でどうして local class の linkage の話が出てくるのか即座に理解できる人は,多分,現在の C++ の local class の linkage (とテンプレートの型パ…

lambda で environment と polymorphic lambda の話って今どうなってんすか?

C++0x の lambda expression の話になるとき, syntax みたいなどうでも良い話 (いやまあぜんぜん良くないんですけれど!) ばかりが話題にされて,もっとこう重要なことに関する議論ってなかなか話題として盛り上がってこないにゃーといつも思うんですけれど…

move のみ可能で copy できないクラスかどうかを判定できない

move のみ可能で copy できないクラスが与えられたときに,それを判定する方法がないけどどうしたもんかにぇ? C++0x の std::is_convertible がまともに実装されないとどうしようもないという結論なんだけれども……. copy constructor はいかなる場合でも宣…

tuple を可変長多重継承で実装

tuple を可変長多重継承で実装する方法,つまり template<class... Args> class tuple : private /*ここで Args を tuple_elem<0, Args0>, tuple_elem<1, Args1>, ... のような形で展開したい */ { // ... }; 上記に相当する実装方法がないか1週間ぐらい考えてたけれど,さ</class...>…

GCC 4.3 で variadic class template 内で variadic class template をインスタンス化するための workaround

GCC 4.3 (GCC 4.3 の正式リリースはまだです.正式リリース前の snapshot の話です) でいろいろ遊んでたけれど, variadic class template の定義で直接他 (もしくは自分) の variadic class template をインスタンス化しようとするとエラー出る.おそらく G…

C++ とか関係なくマルチスレッドプログラミング云々をやろうとする上で

N2461 の "1.7 The C++ memory model" (のうち "threads of execution" の概念を導入する上で必要な修正がかかった部分) と "1.10 Multi-threaded executions and data races" と "Chapter 29 Atomic operations library" の記述でご飯10杯は食べられるんじ…

ET + decltype = infix な TMP

template< int N > struct int_{ static int const value = N; }; int_< 1 > _1; int_< 2 > _2; int_< 3 > _3; template< class LHS, class RHS > int_< LHS::value + RHS::value > operator+( LHS, RHS ); template< class LHS, class RHS > int_< LHS::val…

そんなことよりスーパーpre記法で "cpp" 指定しても decltype がシンタックスハイライトされなくてちょっと悲しい

まだ提案段階のキーワードなのに無茶を言うな,と.

そんなことより decltype(a) と decltype((a))

そんなことより (「そんなことより」とはなんだっ!上の事項もかなり気になるワ!) decltype(a) と decltype((a)) の意味が違うっていうアレ,一瞬かなり混乱しませんか?しませんね.(´・ω・`)ショボーン int a = 42; decltype(a) b; // int b; に同等 decltype((…

decltype(expression) を "::" の左側に持ってくるのは文法的に無理なんじゃないでしょうか的な

http://d.hatena.ne.jp/faith_and_brave/20080201/1201871208 の『インスタンスからメンバの型を取得したい』の話. うーん,今チラッと C++ の文法 (かなり忘れてたーよ!) 見たら, decltype(expression) という文法要素は N2461 の段階で simple-type-spe…

ところで "variadic" ってなんて日本語に訳せば良いの?

可変長テンプレートの使い道が「型安全な printf」と「tuple」と「転送関数 (関数オブジェクト)」ぐらいだと思っている人へ送る,ちょっと早めの素敵な variadic Valentine プレゼント

N2461 より "12.6.2 Initializing bases and members" の 10 の例示コード. template<class... Mixins> class X : public Mixins... { public: X(const Mixins&... mixins) : Mixins(mixins)... { } }; 同じく N2461 より "14.5.3 Variadic templates" の 5 における例示コー</class...>…

aliasing + factory で shared_ptr の生成を効率化

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm#creation shared_ptr のファクトリ関数の話で, user-end コードから new が追放されるとか,例外安全の話 (ここで書かれているような問題が発生しないよー) が出てくるのは理解できるん…

今ふと気がついたけれど,このままのペースで C++0x の Working Draft が成長し続けると,最終的に ISO/IEC 14882:2003 と比較してページ数が倍増以上することはほぼ確実だよにぇ.

何か↓のような感じで. push_back(void) はもろ move semantics の範疇 intrusive container はガワ (と node 側の concept) はどちらにしろ新しく作らないといけないとして, node-container 間の設計・実装の結合度を徹底的に下げることを念頭に置くと, n…

EASTL の各々の motivation について, move semantics を始めとする C++0x 拡張を使ってどう解消するかどうかを考えてみるのは面白いかも知れませんねー. (「○○は面白いかも知れませんねー」 implies 「誰か○○をやってくだしあ」)

Douglas Gregor による C++0x の Concept についての talk

うっはーーー!!!. こういう専門家の話を聞きたかったのだ!だだだ!わーい!わーい!

強い typedef (opaque typedef) が欲しい理由

あれがあると,テンプレート絡みのコンパイルエラーやテンプレートライブラリを多用した実行ファイルの gprof の結果がもうちょっとヒトに優しいものになるんじゃねーか,ってゆ〜. ちなみに,前者は concept による type check だけでは不満な場合があるは…