C++

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

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

あー,なんで納得いかないのか今気が付いた.上記のような確固たる設計上の意図があるのなら close っていう名前がそれを体現してないからまずいんだわ,多分. throwIfNotFlushable? 知らんけど.

More Exceptional C++, Item 19

C++

(以下は私の英語力と理解といい加減なまとめによる産物です.正確な記述は『More Exceptional C++』の原文を参照してください.) 「なんか書いてあったな〜」じゃあ情報量ほぼ0なので追記. 以下は http://diary.imou.to/~AoiMoe/2008.02/early.html#2008.02…

http://diary.imou.to/~AoiMoe/2008.02/early.html#2008.02.05_s02 "More Exceptional C++" になんか書いてあったな〜,これ.

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…

ほらぁ,だから「複数のプログラミングモデルのパッチワーク」って言われちゃうんだってば.なんていうか,こう,ある言語で複数のプログラミングモデルが扱えますよっていうなら,その interaction っていうか,どうすれば複数のプログラミングモデルを有機…

そんなことよりスーパー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...>…

C++ 使い倒している誰か偉い人が "Attacking C++" とか題したエントリを書いてくれにゃいかにゃーと,常々思っているんですけれど.

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 「誰か○○をやってくだしあ」)

EASTL -- Electronic Arts Standard Template Library

C++

やらなきゃいけない仕事があるときに限って非常に面白いドキュメントを発見してしまうの法則.http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html 何も提案してない paper だけどこれ読み物としてすげー面白いじゃん.ゲーム開発のかの字…

なんで Boost.Signal って boost::weak_ptr を native にサポートしてないの?

どうでもよいけれど Boost.Signal ってなんで boost::weak_ptr を native にサポートしてないの?あの trackable ってクラス定義に intrusive に影響するから使うのを避けられるなら避けるに越したことはないと思うんだけどにゃー.自分で勝手に外側に組めっ…

boost::shared_ptr と boost::weak_ptr を使って異種型混合キャッシュ

boost::weak_ptr のメジャーな使い方にキャッシュがあるけれど,単にキャッシュで使うような例示コードはどっかに転がっている気がする (でもさっきぐーぐるせんせにお聞きしたら日本語では転がってないみたいだけど) ので,もう1段 boost::shared_ptr も使…

std::stringstream で openmode を binary に設定しても効果が無いんですけどそこら辺どうなんですか?問題

C++

#追記:題が誤解を生じる表現になっています.正確には「std::stringstream は常にバイナリモードの状態で機能する. openmode によってテキストモードかバイナリモードかを設定してもその設定は全く無視される」です. std::[i|o]stringstream で std::ios_…

Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference が640ページあること考えても,まー入出力周りはやっぱ面倒ってことなんかねー.

ん?いや?なんだかんだで formatting は面倒くさいということなのかにゃ?自分の実装もなんだかんだで char の locale に丸投げしてるだけだしなー.

結局 locale 周り自前で総実装しちゃったっぽいし……. iostream & locale なんて (組み込み型) の formatting 程度しかやらない component なのに,なんでこんなに苦労しますかねー.

誰か Argument Dependent Lookup とか Two-phase Name Lookup あたりのあそこらへん (ほら,あそこらへんだよっ!あそこっ!) について整理してまとめてくれないかなっ!?

lambda 式ほすぃ

C++

で,結論として「実用上 RAII で扱うのが難しい部分」を救う C++ の言語機能として,とりあえず今何が欲しいかというと,それは結局 lambda 式ちゃうん?っていう. callback 関数の本体を inline に書けさえすれば,あとは scope guard の機能はライブラリ…

finally じゃ不満な理由

D に (finally があるにもかかわらず) scope guard が採用されている理由も,上記の発想から考えれば「『プログラムの状態の変化の論理的な対』というのをプログラムの構成における1つの重要な要素と認めて,それが対であることを構文上明確にする」っていう…

resource から logically paired actions へ

C++

メモリが resource としてあまりにもありふれているのは確かだし,それを GC という形で言語として特別視するのはそれはそれでありだろうとは思うんだけれど,個人的な感覚では (resource の扱いという文脈から見ると) GC の advantage は specific だよにゃ…

例外処理@C++

C++

C++ に限定して言えば, 例外処理とは,究極的には「いかに try-catch を書かずに済ませるか」 だと思っている人だったり.要するに,例外処理という文脈においても RAII の徹底というのが C++ としての基本だろう,っていう.ただし,あくまで「究極的には…

あれ?今,モチ食いながら5分くらい考えていて思ったけれど,「他のオブジェクトから参照されている必要なオブジェクトの生存を保証する機構」って RAII と齟齬を起こさにゃい形でそこそこ綺麗な形で言語仕様に乗るんじゃね?つまり, destructor の発動を遅…