読者です 読者をやめる 読者になる 読者になる

にゃははー

はへらー

スレッドアンセーフなshared_ptr

多分みなさんはstd::shared_ptrを使ってるとシングルスレッドで使うんだからスレッドアンセーフでいいのにとか思うことが良くありすぎて再実装したくなると思います。ならない方はなって下さい。設計が悪いと言う人はrecursive mutexを今後使わないで下さい…

便利かもしれないGCC builtin

これは恐らくC++ Advent Calendar 2014の15日目です。古来[要出典]より人々はいかに例外を投げた奴をトレースするかに命をかけてきた[要出典]。投げられた例外自体や、そのメッセージを確認することはできるが、一体誰がその例外を投げたかという情報は一切…

returnとmoveと() ~ GCCを添えて

Boost.Move 1.56 で追加されたBOOST_MOVE_RET*1*2というマクロがあるのですが、GCC 4.9のC++14モードだけなぜかコンパイルできないと言う事象にぶつかってしまい、そういえばここらへんの暗黙のmoveとかって最後にドタバタしてたなぁと思いつつあんまりしっ…

range-based forとstd名前空間

Boost.Coroutineに関してBoost users MLでrange-based forに関する面白い話が流れたので紹介したい。 この話は私も初めて聞いて驚いた。C++11で新規追加されたrange-based forはconceptが削除されたタイミングでその挙動をどうするかで議論していた。なつか…

GCC 4.8からLinuxのmultiarch/multilib対応が改善される

GCC

Ubuntu 11.04からアーキテクチャ依存関係のヘッダやライブラリとかが /usr/lib/x86_64-linux-gnu とかに移った影響でGCCのビルドが通らなかったりうまくリンクできなかったりしていた問題は、従来自分でパッチ書いたり環境変数でpathを通したりしなければな…

1.52からboost::result_ofがコンパイルエラーになるかもしれない

1.51以前のboost::result_ofを使用しているコードでC++11モードをenableにしている場合、1.52に更新するとコンパイラによってはコンパイルエラーになるかもしれない。 というのもboost::result_ofはBoost 1.52から挙動が変わり、従来TR1式のresult_ofであっ…

Ubuntu 11.04以降で自前でgccをビルドした場合のアーキテクチャ依存ファイルについて

GCC

Ubuntu 11.04以降で幾つかのアーキテクチャ依存ファイルのパスが変更されてしまい、upstream GCCを自前コンパイルするとインクルードやリンクが通らないという問題があります。通常、/etc/environmentに CPATH=/usr/include/x86_64-linux-gnu LIBRARY_PATH=/…

libstdc++で_GLIBCXX_USE_NANOSLEEPがないとstd::sleep_for/std::sleep_untilが定義されない件について

結構前から議論が上がってて見てたけどそういえば書いてなかったので今更ですけど...例えばLinux等POSIX系OSで #include <chrono> #include <thread> int main() { std::this_thread::sleep_for(std::chrono::seconds(1)); } としてもGCCは hoge.cpp: In function ‘int main(</thread></chrono>…

GCC4.8をC++でコンパイルするブランチ

GCCはC++を使用することを決定したわけですが、その実際の動きがありました。 http://gcc.gnu.org/wiki/cxx-conversionconfigureに --enable-build-with-cxx を叩きこむと一部のソースがC++コンパイラでコンパイルするようになるわけですが、このブランチは…

GCC4.8はClangに近づく

GCC4.8からdiagnostic messageを改良する動きが出ています。 http://gcc.gnu.org/wiki/ClangDiagnosticsComparison GCC4.6からdiagnostic messageの改良が始まっていましたが、これまでのは例えば struct S { ... snip ... } int i; というコードで意味不明…