にゃははー

はへらー

C++

Boost.Contextがtrunk入り

タイトルの通りBoost.Contextがsvn trunkに入りました.多分1.50.0でのリリースになるのではないでしょうか. 先日githubから突如としてリポジトリが消え去っていましたが,ようやくtrunkに入るまでになったようで何よりです.svnはrev.76974で,ftp.tsukubaが出…

【解決】Intel Atom環境でBoost.ContextがSEGVる

普段VAIO Z(Intel Atom Z550 + Ubuntu 10.10)で開発してるわけなんだけど、Boost.MMMを作るにあたってBoost.ContextがAtom環境でSEGVってくれる。 具体的にはboost_fcontext_startでboost::contexts::detail::trampolineに行く時にtrampolineの第1引数の値が…

tools/boostbook/setup_boostbook.(sh|py)が加えるuser-config.jamへの変更

$HOMEにuser-config.jamを置いている場合、user-config.jamが変更されるため単なるビルドでもエラーになってしまう場合があります。もちろんuser-config.jamを$HOMEに置いたりbjam Advent Calendar jp 2011を読むぐらいの皆さんですからこんな事書かなくても…

Many-to-Many thread Modelのライブラリを書いてみてる

Boost.Context github現在Boost.Contextのmini reviewが実施されてます。これはコルーチンやファイバーを実装するベースとなるコンテキストスイッチを提供します。Boost.CoroutineやBoost.Fiberが頓挫してる中レビューまでこじつけたライブラリです。既存のB…

C++11 Advent Calendar 2011 9日目

C++

ここ数日の怒涛のエントリで精魂尽き果てている感じなので内容は薄いです。あしからず。注:C++11 Advent CalendarとなっていますがかねないのでISO/IEC 14882:2011は持ってないです。なので運よく手に入れることが出来たn3290を使っています。 Pragma opera…

CRTP...?

C++

端的に言うと struct S {}; struct E { template < typename D > struct impl { typedef typename D::template rebind< S >::type type; }; }; template < typename T > struct C : T::template impl< C< T > > { template < typename U > struct rebind { t…

SourceMonitorを使ってみる

C++

http://www.slideshare.net/MoriharuOhzu/ss-9224836 これ見た。やばいと思った。SourceMonitorはここ http://www.campwoodsw.com/sourcemonitor.html今書いてるコードがBoost.Proto使いまくっててやばい。 これは複雑度を測るしかない! やってみる 左から …

virtual dtor + exception specification + multiple deriving

C++

最悪だ。 姫始め 違った コトハジメ 例えば次のコードを見て欲しい struct B1 { ~B1() throw(X); }; struct B2 { ~B2(); // with noexcept(true) in C++11, noexcept(false) in C++03 implicitry }; struct D : B1, B2 { // ~D(); }; さて、この時コンパイラ…

C++11の例外周りでまだ分かってないこと

C++

C.2.5/12.4(destructors) ここで User-declared destructors have an implicit exception specification. となっているが、12.4を眺めてみてもこれを言及している文が見当たらない気がする。 12.4/3でexception-specificationが暗黙的に付与される的なことは…

clang(2.9)のGCC Extension(attribute)

例えばclangはGCCの__attribute__をいくつかサポートしている。 例えば__attribute__((noreturn) )。gcc/clang両方でコンパイル通るように書いてるわけだけど挙動が異なる部分を発見した。 例えば typedef void func_t( void ); void g( func_t * ); void __…

Boost.Peroperoぷろとー ちがった... Boost.Protoぺろぺろー

最近自分の研究でProto充してSFINAEで脳汁噴出してるんだけど、domainとExtendsを作ってgeneratorってなんぞやーって適当に書いてればよかったんだ。 けど、P-Stade.Ovenのregularとかそこら辺でもよく出てるprvalueをexpressionに持ってくるとDangling Poin…

FDIS読書会なるものが開催された

C++

この中で今日一番の発見がこれだ while ( []{} ) { ... } 新たな無限ループが開拓された...

[boost|std]::bindではまったこと

多分よく訓練されたバインダー達はこんな程度の引っかかり方はしないだろうけど私は嵌った。 つまり以下のコードだ。 #include <iostream> #include <functional> #include <boost/bind.hpp> struct some_functor { typedef bool result_type; template < typename Pred > bool operator()( Pred pr</boost/bind.hpp></functional></iostream>…

boost::mpl::identity must go!

※boost::mpl::identityがなくなれって言ってるわけではありません。その使用方法の1つがってだけです。http://gcc.gnu.org/ml/gcc-bugs/2011-07/msg01663.html http://gcc.gnu.org/ml/gcc-bugs/2011-07/msg01664.html上の2つのメールがあなたの目にはどの…

narrowing conversionを考慮したis_convertible

ってかnarrowing conversionを知らんって人のほうが多いか。 これはC++0xからの破壊的変更のひとつで、unified initializerを使った場合に暗黙の型変換を行わないっていうもの。 例えば、 int x[] = { 0.0 }; ってのはC++03では通ってて、double->intの暗黙…

OSC2011 Hokkaidoで行われたC++0xセミナーでの説明等への補足等々...

C++

旅記事はまたあとで書くかも。書かないかも final/overrideについて final/overrideについて、発表中にキーワードではないと訂正が入りましたが、どう言うことかというと const int const = 0; はご存知の通りill-formedです。constという変数名をもつ変数を…

override/finalキーワードキターーー

http://gcc.gnu.org/gcc-4.7/changes.html http://gcc.gnu.org/projects/cxx0x.html何が嬉しいって?そりゃ決まってるでしょ。 「すべてのクラスは派生される可能性があるからdtorには必ずvirtualを付けろ」教をたたきつぶすことが出来るんですよ? 今日を国…

エスケープシーケンス

って覚えんのめんどいしやばいので適当に書いてる。(って前に書いたような... https://github.com/Flast/trance/tree/manip masterとはマージしてないのでいくつかの部分は古いまんまなのでいつマージするか...これ見て思い出した。 コンソールの文字色を変…

std::futureで未来に生きる

C++

非同期にスレッドを走らせたい時、そしてその戻り値を取りたい時にstd::futureを使うといいです。なお、4.7.0 20110510(experimental)時点でlibstdc++のthreadはデフォルトでstd::this_threadの関数が使えません。先頭の2つのdefineはそれらを有効化するた…

詳細は明日とか言っときながら全然書いてなかったけど明日を定義してなかったから問題なかった

ということでとりえあえずTrance.Configの説明 http://d.hatena.ne.jp/Flast/20110506/1304696074 ファイルは https://github.com/Flast/trance/blob/master/trance/config.hpp です細かい説明が面倒なんで、Boost.Configのdoc Macros that describe possibl…

library Trance.Config is new Boost.Config with record ... end record;

https://github.com/Flast/trance/blob/master/trance/config.hppつかれた・・・ 詳細は明日・・・

Trance.TypeInfoを改良

https://github.com/Flast/trance/blob/master/trance/typeinfo.hpp といっても http://d.hatena.ne.jp/RiSK/20110504/1304495091 をもとにデマングル失敗時に例外を投げるように修正する程度ですが。あと、TRANCE_TYPEIDを修正してconst prvalueを返すよう…

Boost.Configぅぅぅぅぅぅぅぅぅっぅ

Boost.ConfigにはBOOST_NO_*といったコンパイラ対応等に関するマクロがありますが、これには問題があります。 例えば #include <boost/config.hpp> void hogehoge() #if !defined( BOOST_NO_NOEXCEPT ) noexcept #endif { fugafuga ... } のようなソースを書いたとき、BOOST_NO</boost/config.hpp>…

trance/typeinfo.hppは壊滅的に使いづらいだろうことは自明なので

xvalue(prvalue)つくりまくるバージョンの楽につかえるやつを追加しました。 #include <iostream> using namespace std; #include <trance/typeinfo.hpp> int main() { cout << TRANCE_TYPEID( int ).demangled_name() << endl << TRANCE_TYPEID( 0 ).demangled_name() << endl; } で、 int </trance/typeinfo.hpp></iostream>…

エスケープシーケンス(端末の)とか使えたらいいなー

って感じでちまちま書いてる。https://github.com/Flast/trance/tree/manip/trance/iostreams使い方は #include <iostream> #include <trance/iostreams/escape_sequence.hpp> int main() { std::cout << trance::iostreams::red << "red!!" << trance::iostreams::reset << std::endl; } って感じreset呼ばな</trance/iostreams/escape_sequence.hpp></iostream>…

GMPのラッパー

gmpxxが非常に残念だという話を博士課程の方から聞いたので薄いラッパーを書いてみてる。 まだ初等関数部分はラップしてないけど基本的な演算ならできるはず。https://github.com/Flast/trance/tree/gmp/trance/gmpまだmpz_tのラップしか出来てないけどその…

trance/typeinfo.hppを修正

今までのは int i = 0; TRANCE_TYPEID_BY_EXPR( i++ ); cout << i << endl; とすると1が表示されてしまっていました。 これは非常にまずいので、修正しました。現在の実装だと上のコードを実行しても0が表示されるようになっています。

type_infoのラッパー

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

C++03向け局所関数

C++

まぁ誰でも思いつくような奴だけど忘れない様にメモ https://github.com/Flast/trance/blob/master/trance/local_function.hpp #define PP_CAT( x, y ) x ## y #define FUNCTOR_NAME PP_CAT( _unnamed_local_function, __LINE__ ) #define LOCAL_FUNCTION( _…

decltype微妙な嵌りどころ

C++

あとで増えるかも,sizeof,alignof,typeidとかも同じような制約受けるかも なんかスコープの扱いが本体のみになってて、宣言には適用されない仕様っぽい。FDISも決まったから多分このままなんだろうな...型推論時にthisが使えない https://ideone.com/22zkgfr…