にゃははー

はへらー

C++

AoSとSoAなflat_map

std::mapを線形配列に落とし込むことで、イテレータ走査やメモリレイアウトを効率化したflat_mapについては以前説明しました。 flast.hateblo.jp 当時私が実装したflat_mapはArray of Structure(AoS)形式の実装で、構造体を線形配列に配置するものでした。こ…

平らな地図、もといflat_map

この記事は C++ Advent Calendar 2021 の8日目です。 ブログもAdvent Calendarも、ものすごく久しぶりになってしまいました。あの頃カラオケで規格書を開いて語り合っていた面子も見なくなり、最近の新しい仕様はよくわからないです。歳をとったものです。

謎の用語niebloid

C++

cppreference.comは随所に様々アノテーションがついていて大変便利だ。例えば(since C++17)といった感じでこれはC++17以降に登場した定義とかそういうのがひと目でわかる。さっき20での変更に何があるのか適当に眺めていたところ、<algorithms>の変更でConstraind algori</algorithms>…

msgpackのデバッグをするための何か

C++

msgpackのデータはあるんだけどなんかズレてたりしてデシリアライズ出来なくて困った困ったみたいなとき、目デシリアライズするのも(でかいと)ツライし、そうでなくてもデバッグしてる間に中身を見ようとしてもVSのデフォルトのビジュアライザだと中途半端…

allocaをinline関数で使うと危険である?

“allocaをinline関数で使うと危険である"という要旨のメールがoss-securityに流れてて、これは一体どういうことだ…と思った。 長い文章でも無いしそんなに難しくもないが、どうやらGCCのオプティマイザの展開順に問題があるようだ。 http://www.openwall.com…

スレッドアンセーフなshared_ptr

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

演算子における引数の評価順と副作用

C++

年も瀬だというのにTwitterで規格書たちが騒いでいたのは記憶に新しい(?)と思うけど、自分もC++11(とちょっとあと)までしか読んでなかったせいで、いろいろ時代の潮流に取り残されている感じがあったのでちゃんと自分で調べましたっていう話。 事の発端と反…

Boost.Fusion, Boost.Phoenixのメンテナになりました

今朝見慣れないメールがいくつか飛んできていて、その中でJoel de Guzman(FusionとかPhoenixとかSpiritとかのAuthor)が、「君をメインメンテナとしてコミット権追加しといたから、ヨロシク」ってなてました。 Boostの開発はgithubに移行してからpull-reque…

インクルードガードとpragma once

C++ Advent Calendar 2015の5日目です。 前C++時代から近代C++に至るまで、ヘッダファイルの重複インクルード排除のために通称インクルードガードというものが使われてきました。 #ifndef YOUR_VERY_VERY_AWESOME_LIBRARY_HEADER_H #define YOUR_VERY_VERY_A…

futureで欲しいutility

つらつらとfutureを使ってたらこういうのが欲しいというのがあったのでまとめ。 と言っても2つしか無いけど (static_)future_cast future<T>のcastが欲しいという話。std::(static|dynamic|const)_pointer_castがあるんだからfutureも欲しくないですか?ってい</t>…

MSVC(に同梱されているcl.exe)のTwo-phase name lookupが未実装というのはどういう挙動をするのかという備忘録

C++

Boost.勉強会の立ち話で id:redboltz さんからMSVCのTPLが未実装ということについて、詳細を聞いたので確かめてみた。 まぁ聞いたら話は簡単で、non-dependent typeであってもlookupがinstantiation timingまで遅れてしまうという感じ。 正しいTwo-phase nam…

CrystaX NDKとBoost

私はAndroidの開発をするわけではないが、Googleが出すAndroid NDKとは異なったNDKがあるらしい。CrystaX .NETサイト名に.NETがついているがMicrosoftとは無縁の様。で、そこの開発チームが最近Boostへ積極的に関わってきている。 いくつかのライブラリは動…

便利かもしれない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が削除されたタイミングでその挙動をどうするかで議論していた。なつか…

Boost.Range でも regular が使いたい! - C++ AdC 2013

partake.in の12日目です。もう一個のカレンダーの方で激おことかforkforkとか言ってたら、なんかみんな頑張ってるしカレンダー名に(fork)とか付いてしまってて申し訳ないなーとか思ってたり少しはしているのですが、特にカレンダー書く予定はないです。ネタ…

C++ Advent Clandar 2013 1日目 (forkした方)

※注: これはforkした方の。C++ (fork) Advent Calendar 2013 - Adventar今年もAdvent Calendarの季節です。 しかも驚くべきことにC++ Advent Calendarはforkしました。あと先に断っておきますが、25日やらないです。 立ちあげた本人が表にもこちらにも書こう…

Boost.Coroutine with 1.55.0 Beta 1 RC

もうBoost 1.55.0の時季となったわけで、リリースノートの翻訳作業も進めている。 Boost 1.55.0のリリースノート翻訳を更新 - Faith and Brave - C++で遊ぼう今回はBoost.PredefというBoost.Configみたいな感じのものが来る。 どうせ誰かが解説するし、変更…

std::bindとboost::bindとboost::asio::placeholders

c++ - Should std::bind be compatible with boost::asio? - Stack Overflow std::bindにboost::asio::placeholder::errorを渡すと死ぬ(そりゃそうだ) - 2冊の本を3等分Boost.Asioのasyncハンドラには多くの場合、Boost.Bindとboost::asio::placeholdersを…

C++ AdventCalendar 2012 9日目 「Boost.AsioでGraceful Restart」

C++ Advent Calendar 2012 - PARTAKE の9日目です。今回は Boost.Asio で Graceful Restart してみたいと思います。 ※Unix依存コードなのでWindows環境はわからないです。あしからず。まぁWinで鯖とか... Graceful Restart とは Graceful(ぐれーすふる, 優雅…

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

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

Boost 1.50.0で追加されたライブラリ達

皆さんご存知の通りBoost 1.50.0がリリースされました。 このリリースで皆さん当然user-config.jamに BOOST_THREAD_VERSION=3 を追加したことと思います。まぁ今回は変更ではなくて新しく追加されたライブラリについて。 Boost.Algorithmさんには若干失望し…

Boost.Phoenix V3でのmove

例えば common.hpp を次のように書いたとする。 #include <boost/move/move.hpp> struct S { BOOST_MOVABLE_BUT_NOT_COPYABLE(S) public: S() {} S(BOOST_RV_REF(S)) {} }; void f(S) {} で、このSをfにmoveしてみる。 #include "common.hpp" #include <boost/move/move.hpp> int main() { S s; f(boost</boost/move/move.hpp></boost/move/move.hpp>…

Boost.Contextのこととか話した

Boost.勉強会 #9 つくば - boostjp Boost9 session 並行と並列とスレッド 前半はなんか概念的なことばっかり話したと思う。しかも後半でほとんど関係なくなったし。 とりあえずユーザースレッドってものを導入したかったのだと思う。多分。カーネルスレッド…

Boost.勉強会 #9 つくばを主催した

Boost.勉強会 #9 つくば - boostjp 主催っていうのは存外難しい まず、会場の確保。これは何度も言っているけど新城靖准教授にしていただいたことで実現できた。 実際確保だけはできるけど教室機材は使ってはいけないとか言われる。教員が借りると問題ないら…

Boost.Contextの怒涛の変更

Boost.Contextがtrunkに入ってだいぶ経ちましたが、ここのところ非常に大きな変更が入っています。 ※今後も更に変更されるかもしれないので、リリース時にはこのエントリも役に立たないかもしれないです。 これまでの流れ 内部実装とかユーザから直接関係な…

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; というコードで意味不明…

Steven Watanabeの神コミット in Boost.Context

Boost.Contextがtrunk入り - にゃははーでBoost.Contextのビルドオプションが面倒だと言ったが、我らがSteven Watanabeがやってくれた。svnではrev.77196,ftp.tsukubaのgitでは6d06ffddf135088328525bb677c0c0e0687c917dだ。このコミットが何を意味するか端…