Grammar
boost::is_podはほとんどのコンパイラで動かないようだ 以下のようにすると少なくとも警告が出せる (Comeauやgccなど) Boost.Xpressiveが利用していると思われる inline void pod_check(...) {} struct A {}; struct B : A {}; inline void pod_check_of_AB(…
関数呼び出しのシンタックスは醜い f(g(h(x)) を f $ g $ h $ x の様な感じに書けるようにしたい これはpipableを逆にしただけなので、何か右結合のoperator overloadをこの実装に追加すればいい Pipableの概念に組み込むのがいいかもしれない これを使ってO…
参照を何でも保持するany_ref (実装) boost::tuple<int, char, std::string> tup(1, 'a', "hello"); BOOST_FOREACH (any_ref a, oven::hetero<any_ref>(tup)) { if (a.type() == typeid(std::string)) { std::string &s = pstade::any_ref_cast<std::string>(a); s = "goodbye"; break; } } BOOST_CHECK( bo</std::string></any_ref></int,>…
まず、ODR violation対策のこれを参照 msvcは、上の_1を(optimizerがないと?)statically-initializeできない gccは、_1はstatically-initializeできるが、placeholder const *p_1 = &_1; のように使った場合、p_1をstatically-initializeできない 結局、sta…
新しいプログラミングパラダイム、かもしれない オブジェクトを静的に作るために全部POD型にする Boost.XpressiveやBoost.Protoがその実践例と考えられる 実際的なメリットとしては、コンパイルが早くなる 初期化に関数を使わないから POD型はユーザー定義の…
static-initializationのために苦しいマクロを使う羽目になる 8.5.1/14(Working Draft)はsubaggregateにも当てはまると思われるので型が複雑になると大変になる 実装とサンプル Quickbook1.4(Boost1.35相当)がかなりパワーアップしていた
FC++にあって、実装は意外に簡単 実装とサンプル Haskellのマネであるらしい
EBOが働かない場合があるらしい (参照) もう自分でprivate部を書く方が簡単だと思う
auto_ptrはelement_typeが異なるものからはcopy-initializeできないようだ (参照) auto_ptrの初期化の表 Defect Report 84. user-defined conversionが二回必要なので駄目らしい [id:mb2sync:20060808]もコンパイルエラーになるべきだと思われる
boost::optionalをresetしてからassignすればいいだけだった (実装)
static_castは何をしているか分からないので駄目である そこで実行時にチェックできる場合はチェックするdowncast (実装) VC++7.1のバグのおかげですごく苦労した cv-qualifierは自動なのがミソ []#include[] []<pstade/static_downcast.hpp>[] []#include[] []<boost/utility/result_of.hpp>[]</boost/utility/result_of.hpp></pstade/static_downcast.hpp>
boost::arrayをdirect-initializationする方法がないらしい (参照) make_arrayのようなものを作らないといけない Boost.Assignはassignするので少し遅くなる そこでinitializer-list(pdf)のようなもののエミュレートを試みた 実装とサンプル copy_range関数…
Auxiliary class interfacesという提案(pdf)がある operator|を使って実装を試みる 引数がゼロ個の場合は本当に使っていいかもしれない []#include[] []<pstade/auxiliary.hpp>[] []#include[] []<boost/utility/result_of.hpp>[] []#include[] []<cstring>[]</cstring></boost/utility/result_of.hpp></pstade/auxiliary.hpp>
なるほど (参照)
テンプレートを利用した型はコンマで区切られていることがあるので([id:Cryolite:20050326])を使うのだが、const修飾が消える (13.1/3) VC++7.1は消えないので注意 コンマを保護するマクロを呼ぶのはユーザの責任になる こうすればどうだろう (実装) affect…
The keyword typename shall only be applied to qualified names, but those names need not be dependent. (14.6/5) 上の文は、最新のDraftでは(typenameのルールを緩くするため?)削除されているようだ []struct[] []X[] []{[] []typedef[] []int[] []typ…
[id:uskz:20061111]を調べていて(たぶんVC++のバグ?)、こんなものを発見 「using directiveを含む名前空間とそのusing directiveの対象となる名前空間の両方を含んでいる最も内側で取り囲む名前空間の中で宣言されたように見える。」 (7.3.4/2)
以下のコードはtest1でassertion failedとなる (2)は、'T=D'なので、暗黙に生成された(1)とのオーバーロード解決に勝利する test2では、(3)がB型にキャストすることによって(1)を優先するようにしているのでassertion failedにならない 何が問題かと言うと、…
std::distanceの結果が負になるようなことはあってはいけない ここの204 "or decrements"の意味が不明という話 iterator_facadeで使うdistance_toの引数はreachableとは限らないので注意
以下のコードで、(1)は不正 (8.3.5/4) GCC3.4とComeauではコンパイルできる 最新のDraftではconstは無視されるので合法になる?(参照) (2)は何が起こるべきなのか不明 VC++7.1/8とComeauではコンパイル出来る GCC3.4ではコンパイル出来たり出来なかったりす…
std::auto_ptrとboost::scoped_ptrをまとめてDeprecatedにするunique_ptr(旧名move_ptr)の提案がある unique_ptrの実装 Boost.Interprocess(cvs)にも含まれていてなぜか実装が二つある どちらもちょっとずつ駄目らしく今のところauto_ptr/scoped_ptrは必要な…
とうとう答えにたどり着いた?かもしれません Metafunctionの要らない場合です []namespace[] []poost_extension[][] {[] []struct[] []hello[][] { };[][]}[]
以下のコードはassertion failedとなる kはconst修飾されてないので、(2)が、(1)とのoverload解決に勝利する・・・参照 これが意図したものであることはまずないと思われるので(3)の定義を忘れないようにする コンパイラが暗黙に生成するcopy-constructorで…
constでない参照は一時オブジェクトで初期化できない id:mb2sync:20060727が使えた to_streamはostream_iteratorと同じものです id:mb2sync:20060804のためにconst_castは使えないことに注意 []oven[][]::[][]copy[][]([] []file_range[][]<>([][]"x.txt"[][…
!P || Q これが読みづらい Qの遅延評価のために関数にできない P ? Q : true なるほど・・・vector_example.hpp
前回の続き 要するにassertは意味が多すぎるので名前をつけよう、ということだ バグ潰しのためなのか事前条件なのか分からないassertがよくある 結局こうなった・・・ソースコード postconditionがあるときのreturnがマクロになってしまった []#include[] []<pstade/contract.hpp></pstade/contract.hpp>…
こんなものが提案されていた(必見)・・・Proposal to add Contract Programming to C++ function-try-blockでなんとかする試み・・・ソースコード 標準準拠のはず、だが、これは今までで一番怪しい 結局コンストラクタでお手上げになってしまった postcondit…
bool_testableというのが、Boost.Operatorsにいったん追加されたあと程なく削除されている・・・昔のoperators.hpp 完全な実装は無理なのかもしれない いまのところこうなった・・・ソースコード 参考文献 The Safe Bool Idiom Another safe_bool alternativ…
以下のコードのように、コピー(Move)するauto_ptrのelement_typeが異なるとoperator auto_ptr_ref()が無限に再帰してスタックがとぶ どうもauto_ptr_refのコピーコンストラクタを呼ぶために再びこれが呼ばれるようだ コンパイラのバグではなくSTLのバグと思…
ひっかかるのはまれであると思いますが、以下のコードはGCC3.4ではエラーになる・・・参照 draft October 2005では修正されているようだ []#include[] []<boost/noncopyable.hpp>[]</boost/noncopyable.hpp>