LLVM のサイトをあさってたら clang-format plugin for Visual Studio というものを発見した。 LLVM Snapshot Builds clang-format plugin for Visual Studio(ダウンロード) 気になるけどいま手元に Visual Studio 環境がないのでぐぬぬ。 誰か試してみて下しあ。 しかし、LLVM 3.4 あたりから Visual Studio の方にも力が入ってきていますねー。
ローカル環境の問題で 1ヶ月ぐらい前から dropbox の同期を止めていたんですが、今日、久々に同期した結果… はい、ローカルの dorpbox のデータが最後に同期した 1ヶ月前に巻き戻っていました。 dropbox に保存していた vimrc も自作の Vim プラグインも fork したプラグインも .git 内のファイルも雑多なプロジェクトも雑多なコードファイルも 全部 1ヶ月前に巻き戻っていました。 最新版のローカルのデータは競合コピーというファイルに置き換わって…。 どうするんのこれ…。 とりあえず、以下のようなスクリプトで対応した。 IFS=$'\n' for file in $(find /mnt/sub/home/Dropbox/ -regex ".*worker-System.*") do echo $file echo $file | sed -e "s/ (wor
@supermomonga さんに教えてもらいながら middleman で構築したサイトを GitHub Pages で公開する事ができたので、その手順をまとめておきます。 デプロイとかめんどくさいと思っていたんですが、実際やってみたらめちゃくちゃ簡単でした。 [必要なもの] git github のアカウント gem middleman [middleman の生成] まずはローカルに middleman のプロジェクトを作成します。 middleman は gem からインストールする事ができます。 $ gem install middleman $ middleman version Middleman 3.2.2 これで、middleman のコマンドを使用できるようになったので次のようにして middleman でプロジェクトを生成します。 $ middleman init t
Boost.Filesystem に path を受け取る fstream が定義されているらしいです。 [ソース] #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> int main(int argc, char const* argv[]){ namespace fs = boost::filesystem; fs::path exe = argv[0]; fs::ifstream ifs(exe.parent_path()/"main.cpp"); if( ifs.fail() ){ std::cout << "Not found" << std::endl; return 1; } std::string line; while(std::getline(ifs, line)){ std:
The LLVM Compiler Infrastructure LLVM 3.1 リリースまでのスケジュールは以下の通り。 4月16日 - Branching for 3.1 release 4月16日〜4月22日 - Phase 1 testing 4月23日〜4月29日 - Bug fixing for Phase 1 issues, all features completed 4月30日〜5月06日 - Phase 2 testing 5月07日〜5月13日 - Addressing Phase 2 5月14日 - Release of 3.1! 予定通りであれば、ちょど C++ Now! 開催中に LLVM 3.1 がリリースされることになりますね。 まぁ LLVM 3.0 は1ヶ月弱ほどリリースが遅れましたが。 C++11 の言語機能は全部入るかしら…? あと Windows
libclangを使ってみる。 - only 1 truth 上記のサイトで初めて知ったんですが、llvm/clang に含まれている c-index-test という tools を使用すれば C++ で宣言位置を取得する事が出来るみたいなので、Vim script で簡単に実装してみました。 c-index-test.exe は、llvm/clang をビルドすれば出力されています。 clang 3.1(trunk) でテストしましたが多分他のバージョンでも問題ないと思います。 (ただし、C++11 のコードの場合は clang のバージョンに依存するので注意して下さい。 [動作環境] clang c-index-test llvm/clang をビルドすれば生成されます neocomplcache インクルードされているヘッダーファイルを取得するために使用 [インクルードディレクトリ
今年開催される『C++Now! 2012』のセッションの一つに 『テンプレートメタプログラミングによるコンパイル時構文解析』 なるものが存在しているのですが、github でライブラリが公開されていたのでちょっとつついてみました。 mpllibs - github とりあえず、safe_printf とかがあったのでそれを試してみました。 [ソース] #include <mpllibs/safe_printf/printf.hpp> #include <mpllibs/metaparse/string.hpp> #include <boost/mpl/print.hpp> int main(){ namespace safe = mpllibs::safe_printf; using safe::printf; printf<MPLLIBS_STRING("name:%s, age:%d\
Vim を始めた頃から無駄に機能ごとにファイル分割をして、ごちゃごちゃになっていた vimrc をこの機会にちょっと整理してみました。 1つのファイルに全部まとめたので行数は長くなったのですが、使ってなかった設定や quickrun.vim 回りの設定を見直したのでだいぶすっきりとしました。 Vim の折りたたみ機能を初めて使ってみましたがなかなか便利ですね。 C++ 回りの設定はまだちょっとごちゃごちゃしているのでもうちょっと見なおす必要がありそうですが、しばらくはこのままちょっと試してみたいと思います。 年に1回ぐらいこんな感じで vimrc を見なおしてみるのもいいですね。 次は OS 間でも問題なく使用できるようにしたい。 で、現状の vimrc とかを見たい人は続きからどうぞ。 半端無く長いです。 ちなみにわたしは全て Dropbox でソースコードの管理をしているので gith
って事で時代の流れに乗って買いました。 前の携帯は5年ぐらい使っていたのかな?もう電池があれで起動すら怪しくなっていたんですよね…。 買ったのは au の GALAXY SII WiMAX ISW11SC です。 acro HD とどっちにしようか迷ったんですが、WiMAX + テザリングがあるこちらにしました。 買うまでは料金回りがよく分からなかったけども分割だとすごく安く感じますね。 ちなみにこれが3代目の携帯。 [入れたアプリ] ES ファイルエクスプローラー doubleTwist Google日本語入力Beta Angel Browser Terminal IDE twicca ついっぷる とりあえず、最低限のアプリって感じですね。 ブラウザは色々と試してみたんですが『Angel Browser』がなかなかよさげで気に入っています。 音楽プレイヤーは iTunes と同期が出来る
lambdaとdecltypeを組み合わせれば、ユニーク型IDの必要ないc_functionが - 本の虫 さて、c_function と lambda expressions の組み合わせについては上記のサイトを参照してもらえれば分かると思います。 c_function を使用する場合、ユニークな型を使用する必要がありますが、それを lambda expressions を使用しようという話ですね。 確かに lambda expressions は decltype([]{}) のように decltype で使用することは出来ませんが、上記の場合だと引数として渡せば解決出来そうなのでやってみました。 [ソース] template<typename Unique, typename FuncType, typename Func> struct c_function_impl; templ
user-defined literals の直後に追加されたみたいで気が付きませんでした。 文字列の中に直接文字コードを記述することが出来ます。 C++11 implementation status GIT mirror [ソース] #include <string> #include <cassert> int main(){ char16_t const* s = u"\u307b\u3080ほむ"; assert(s == std::u16string(u"ほむほむ")); return 0; } clang の進化が止まらない。 [コンパイラ] clang++ (LLVM) 3.1 20120311(trunk) [参照] http://d.hatena.ne.jp/faith_and_brave/20081009/1223548246 http://www.yourname.
実は勘違いしていた C++11 の仕様シリーズ。 タイトル通りなんですが、constexpr関数内ではローカルクラスを定義することは出来ません。 constexpr int func(){ // clang3.1 error: types cannot be defined in a constexpr function class X{}; return 10; } そんな感じでこれをそのまま使うのはボツかなぁ…。 まぁ関数の外でクラス定義してしまえばいいんですが。 ちなみに gcc4.7 だと上記のコードでも問題なく動いてしまいます。 [おまけ] ついでなので『constexpr でエラー出力』を clang3.1 でも試してみました。 [ソース] struct error_division_by_zero{ int operator()() const{ throw("divisio
Visual Studio 2010 SP1 で再現したバグを Visual Studio 11 Beta でも試してみました。 差し当たって既存のバグが思い浮かばなかったので適当にぐぐって見つけたものを試してみました。 下記のサイトに記述されていたバグコードを試してみましたが全て問題なく動作しました。 VS2010 RCが恐ろしく単純なコードでクラッシュする件 - 本の虫 VC10の不完全すぎるlambda- 本の虫 VS2010でラムダ内ラムダからキャプチャが出来ない - にゃおろぐ! ( nyaocat ’s diary ) やったーVS2010 のバグみつけたよー - にゃおろぐ! ( nyaocat ’s diary ) あんまり Visual Studio 2010 で C++11 のコードを書いたことがなかったんですが結構ありますね。 ラムダ回りのバグは治っているみたいです。
[C++11 Implementation status] [ソース] #include <vector> #include <iostream> template<typename T> void disp(std::initializer_list<T> list){ for(auto&& n : list){ std::cout << n << std::endl; } } struct X{ X() : elems{1, 2, 3}{} int elems[3]; }; int main(){ std::vector<int> v = {1, 2, 3, 4, 5}; std::vector<std::vector<int>> vv = { {0, 1, 2}, {3, 4, 5}, {7, 8, 9} }; disp({1, 2, 3}); X x; for(auto&& n :
C++er は C++11 で書くことを強いられているんだ!!(集中線 ってことで C++03 の enable_if を使ったコードを C++11 で書きなおしてみたいと思います。 べ、べつにぼっち Boost.勉強会じゃないんだからねっ! まだ C++11 のコードは手探りで書いているので、もしかしたら今後もっとスマートな書き方が出てくるかも知れません。 そういう意味でも今後が楽しみですね。 [元にする C++03 コード] #include <boost/type_traits/is_integral.hpp> #include <boost/utility/enable_if.hpp> template<typename T> void func(T x, typename boost::enable_if<boost::is_integral<T> >::type* =0){ s
やってみました。 __FILE__ とかがコンパイル時にパースできますね。 果たして必要になるときが来るのだろか…。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> #include <sprout/tuple/array.hpp> #include <iostream> template<typename Parsed> struct parsed_holder{ constexpr operator bool() const{ return parsed.success(); } constexpr decltype(std::declval<Parsed>().attr()) attr(){ return parsed.attr(); } temp
のようなものです。 lambda expression 内で構造体を定義しているので、そのまま引数として渡すことが出来ます。 イメージとしては Boost.Parameter が近いかしら? [ソース] #include <iostream> #include <string> #include <boost/typeof/typeof.hpp> #define _(MEMBERS) []{ struct { MEMBERS; } local; return local;}() template<typename T> struct initializer{ template<typename ...Args> T operator ()(Args... args) const{ return T{ std::forward<Args>(args)... }; } }; template<
やっとこさはじめました。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> #include <sprout/string.hpp> #include <boost/mpl/print.hpp> #include <boost/mpl/int.hpp> int main(){ namespace weed = sprout::weed; using weed::int_; // 21:53:49 というような構文を解析 constexpr auto parser = int_ >> ':' >> int_ >> ':' >> int_; static constexpr auto time = sprout::to_string(__TIME__); st
ちとハマったので覚え書き。 #include <boost/range/any_range.hpp> int main(){} のように だけだと any_range.hpp 内でコンパイルエラーになります。 // 先に include する #include <boost/range/concepts.hpp> #include <boost/range/any_range.hpp> int main(){} 先に を include する事で解決しました。 一応、チケットに上がっているみたいですけど、まだ未修正みたいですね(´・ω・`) [boost] ver 1.48.0 [参照] https://svn.boost.org/trac/boost/ticket/5603
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く