LocalTypeHashというかKeyにかぶりがあってもコンパイルを通す型mapの種

受け取ったタイプリストに対し適当な数字を被らないように返すLocalTypeHashメタ関数を作りたい using TypeHash=makeTypeHash<List<char,int void>>; TypeHash::apply<char>//0 TypeHash::apply<int>//1 TypeHash::apply<void>//2こんな感じしかして型が被った場合どうなるだろうこの場合このまま</void></int></char></list<char,int>…

VS2013で破綻した型の名前を出力してたら{ctor}の文字が出てきた

タイトルで話が完結している namespace minibug { template<class ...T> struct List{}; template<class...T> std::true_type length_impl(List<T...>); template<class T> struct wrap{ using type = T; }; template<class T> using identity = typename wrap<T>::type; template<class list> using length = identity</class></t></class></class></t...></class...t></class>

VS2013で遭遇した最悪なバグ

自分が遭遇した最悪なバグを書いておこうと思う 型破壊バグ std::cout << typeid(BreakType).name();//struct ??::??と出力される //error C2133:サイズが不明です //error C2512:コンストラクタがない BreakType c; 上記のように壊れた型が発生する初代ポケ…

メタ関数の高階関数

C++

apply<sprout::types::quote<F>, Args...>::type は F<Args...>::type を返す— 狂える中3女子ボレロ村上/陶芸C++er (@bolero_MURAKAMI) 2014, 8月 18 apply<sprout::types::self<F>, Args...>::type は F<Args...> を返す— 狂える中3女子ボレロ村上/陶芸C++er (@bolero_MURAKAMI) 2014, 8月 18 これらの動作は Boost.MPL で</args...></sprout::types::self<f></args...></sprout::types::quote<f>…

「脱アルゴリズム宣言」読書ノート

この話で出てくる「アルゴリズム」「脱アルゴリズム」という単語について ここでいうアルゴリズムとは命令型言語的なアルゴリズムを指している なので必要に応じて「アルゴリズム」という単語を「(命令型言語的)アルゴリズム」と脳内正規表現マッシーンっで…

c++11constexprでコンパイル時バイトニックソートを大雑把に実装した

C++

ネタではなく非常に強力であり実用的なソートである //コード bitonic_sort.hpp //実行結果 [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッちなみに一部コードは C++11 constexprでマージソート - ここは匣 から借りてきた バイトニックソートとはマージソートの亜種であり…

c=pow(2,k)のとき、n xor cはn + c*((n/c) mod 2 ? -1:1)と等しいらしい

解説 c == pow(2,k) == (1<<k)n + c*((n/c) mod 2 ? -1:1) → n + c*((n/(1<<k)) mod 2 ? -1:1) → n + c*((n>>k)mod 2?-1:1) → n + c*([nのk番bitが立っているか]?-1:1) → [nのk番が立っているか] ? n-c :n+c → [nのk番が立っているか]? [nのk番を折る] :[nのk番を立てる] → n^c</k)n>

constexprで無限リスト作った

C++

こんな感じ struct Func { constexpr int operator()(int i)const { return i+1; } }; make_recurrence_list(0,Func{});//0,1,2,3,4... 無限だから長さを求めようとすると無限ループ起こしてコンパイラが死ぬ 単方向リストだから巻き戻しもできない かいてて…

ドワンゴC++勉強会 #1に行ってきた

タイトルの通りである ドワンゴC++勉強会 #1 - connpass constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。CPUの嬌声が聞こえてきそうだ *1 発表者:ボレロ村上氏 資料:http://www.slideshare.net/GenyaMurakami/onstexprcpu*2 内容は(…

Boost.mpl11を読んだ

C++

ldionne/mpl11 · GitHub自分の大雑把な理解。間違ってたら指摘してもらいたいmpl11は基本的に遅延評価である。ゆえに極力計算しないBoxed typesとは多くのメタ関数やtype_wrap などT::typeとできる型のことであるmpl11のメタ関数は基本的にboxed typeを引数…

私がvisitorパターンが嫌いな理由

私には昔から、GOFのデザインパターンというものを学習したときからどうにも『そり』が合わないデザインパターンがあった visitorパターンである別に理解できなかったわけではない。使えないわけでもない。実際何度か使う場面もあった だが、思いだすたび、…

C++11なvariantを大雑把に実装した

C++

variant test variant C++11仕様だから20個以上の要素が詰め込めるよ!!COOLCATって感じだ コンストラクタとデストラクタ、あとapplyだけ実装してある 以下にget関数の簡易な実装を示す template<class T> struct Get { T operator()(const T&x)const { return x; } </class>…

VS使いだけどwandboxでconstexpr二分木fold関数作った

グィスト constexpr binary fold実際に(静的に)実行したものはこちら wandbox [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ二分木foldとは文字通り二分木で畳み込み関数である binary_fold(plus{},1,2,3,4,5)は以下のように解決される ((1 + 2) + (3 + (4 + 5))) foldlやf…

tuple操作ライブラリ「tupleple」

C++

ギッハッハブ Fuyutsubaki/tupleple · GitHubタプルプルプルタプルプル ご意見もらえると喜びますできること一覧 at N番目の要素にアクセスする apply タプルに関数を適用する view おおむね元要素へのアクセスのインデックスを架け替えてるだけである 基本…

マクロフリーの健全なテストライブラリをちょっと作ってみた

マクロは邪悪であり害悪である 故にマクロは滅びなければならない 滅ぼさなければならない。存在してはならない。これは人間の義務である頭の中でワンワンと神が嘶くのでマクロフリーなテストライブラリもどきを作っていたgist マクロ無しの健全なテストライ…

規格的にヤバそうな限定type_hashメタ関数を作ったけどGCCで動かないし、別の実装とかも考えたけどそれもダメくさいしもうだめだ

再帰深度を抑えたtuple的コンテナの構築 - ここは匣 コレの最後の部分を逆に動かしたら指定された方だけに対応するhash関数が作れるのではとか考えてみたVSとClangでは動いたというのに。2対1だけど規格的にどっちが正しいのかわからない 間違ってる気さえ…

対数オーダー再起で構築されるtupleのギミックを大雑把に実装した

C++

(追記)こっちも読め。こっちのがいい 再帰深度を抑えたtuple的コンテナの構築 - ここは匣 (追記終わり)調査環境はVS2013のみ たぶんO(log N)で動く コード中のstd::tupleはtype_listの代わりに使った。std::tupleを入れると実は対数オーダーにならないんじゃ…

VSでも動くパラメーターパックヘルパーを作った

C++

https://gist.github.com/Fuyutsubaki/e798e6c8d9265d020b4d これ template<size_t N ,class Func> class drop_functor { template<class F> drop_functor(F&&f); template<class...T> auto operator()(T&&...args); }; template<size_t N,class Func> auto make_drop(Func&&func) ->drop_functor<N, Func>; N個dropして関数を適用して</n,></size_t></class...t></class></size_t>…

対数オーダーでN番目の引数にアクセスするvalue_at的関数

C++

夜 (fimbul11) on Twitter さんの Template Meta Programming入門から応用までの367ページ当たり見ながら書いた 深度O(logN)で動くvalue_at的な関数http://melpon.org/wandbox/permlink/i0YgUwd8wdsJBDJE gccとClangで動作確認。VSではstd::index_sequenceが…

const 参照と右辺値参照と一時オブジェクトの寿命、あとforward_as_tupleとか

C++

一時オブジェクトとはこれである x+y; Type(); 要するに変数に関連付けられていないオブジェクトのことであるこいつ等の寿命は式が終わるまで、つまりセミコロンが出てくるまでである void f(const std::string&s); //main //fを処理する段階ではまだ生きて…

二項演算子をクラス内でオーバーロードしたテンプレートクラスをテンプレート関数で返してdecltype内で演算すると C2677 エラーが起きて最高に意味不明

template<class> struct rhs { friend int operator*(int x, rhs){ return 2; } }; template<class T> rhs<T> make(T){ return rhs<T>(); } using R = decltype(42 * make(42)); int main(){} 自身が右辺に来る二項演算子を クラス内でオーバーロードした テンプレートクラスを テ</t></t></class></class>…

メイドでもよく分る右辺値参照

C++

本日2014年 2011年から早3年。C++11も浸透してきた、してきてる、してきて欲しいなという時分ですね 冬椿です。ファミレスに行ったらカレーがメニューから消えてました。こんばんはC++11で追加された機能の一つに『右辺値参照』というものがあります こいつ…

そうだ、reverse関数を実装しよう

某社に面接に行ってきました。 で、そこで「reverse関数書いて(意訳)」と言われたので書いてきた void reverse(std::string& str) { size_t N = str.size(); for (size_t i = 0; i < N/2; ++i) std::swap(str[i], str[N - 1 - i]); } こんなの。CodeIQなら★…

VisualStudio2013のバグ?alias templateにT::valueやT::typeやvariadic-templateを使うとC2955エラーなど不都合が起こる

VisuakStudio2013のバグ?エイリアステンプレートにエイリアステンプレートを使うとC2955エラーを吐く - TXT.TXTの問題をちゃんと分析しなおした テストコードはーい template<size_t N> struct Index{ static const size_t value = N; }; template<class T> using foo = typena</class></size_t>…

タイプリストに対するmapの実装とC++11のテンプレートメタプログラミング

C++

なんかむらむらする。プログラムを書くっていう日じゃない のでちょっと自作ライブラリtupleple::type_list::mapについて書きたいまず何がやりたいか、サンプルを書く using tuple=std::tuple<void,int,char>; using result=map<std::add_pointer,tuple>::type; static_assert(std::is_same<result,std::tuple<void*,int*,char*>>::value,</result,std::tuple<void*,int*,char*></std::add_pointer,tuple></void,int,char>…

index tuple idiomについてと、std::integer_sequenceとかについて考える事

現在私はtuplepleという、boost.fusionのC++11版になりたいタプル操作ライブラリを作っている 作り始めた理由はちょっと込み入ったことをしようと思うと必ずタプル操作が必要になったからだで、製作途中でindex_tuple_idiomというのを思いついた 厳密に言う…

VS2013のバグ?クラス内非型テンプレートクラスをクラス内の宣言部で非型を使って展開するとできない。ってこう書いても何言ってるかわからんね

C++

なんかVSバグ?タグ作ったほうが良い気がした タイトルの通り #include<tuple> #include<type_traits> #include<iostream> struct C { template<size_t n> struct inner { using type = int; }; template<size_t ...N> static std::tuple<typename inner<N>::type...> f();//← template<size_t ...N> struct g { std::tuple<typename inner<N>::type...…</typename></size_t></typename></size_t></size_t></iostream></type_traits></tuple>

[function<R(Args...)>] → [function<R(tuple<Args...>)]する関数を書いてみた

C++

就活中。C++かけるところで働きたい。この際C++じゃなくてもいい。冬椿です [std::function<R(Args...)>] から [std::function<R(std::tuple<Args...>)]に変換する関数を書いたおよそ40行。短いことはいいことだ //サンプル int func(int a, int &b, int c) { std::cout << a << b << c; return</r(std::tuple<args...></r(args...)>…

VisuakStudio2013のバグ?エイリアステンプレートにエイリアステンプレートを使うとC2955エラーを吐く

この問題解決は不具合があります。この問題についてはこちらをご覧ください VisualStudio2013のバグ?alias templateにT::valueやT::typeやvariadic-templateを使うと不都合が起こる - TXT.TXT テストコード #include<iostream> #include<typeinfo> namespace test { template<class T> st</class></typeinfo></iostream>…

【C++】poly_functionが作れなかったのでジェネリックラムダ2つを受け取りどちらかを返す関数型言語のif式っぽいのを作った

C++

前回(【C++雑記】半日ほどstd::functioinのジェネリック版について考えてたけどどう考えても難しい - TXT.TXT) のだとあんまりにもあんまりなので、ナンカもうそれっぽい事が出来ればいいやとIf関数を作ってみた https://gist.github.com/Fuyutsubaki/853670…