@lyrical_logical いえ,仕様云々以前の話として,たとえば関数呼び出し f("hoge") が string<'h', 'o', 'g', 'e'> なる型を返すのは原理的に不可能に思われるので,この構文以外のどんな感じをイメージしているのかにゃー,と思いまして.
2010-11-14 20:00:23@Cryolite "hoge" の長さ N はとれるので、そこから 0..N-1 の parameter pack indices を作って src[indicies]... で unpack できるかなーと思ったんですが、何かこれはダメなんですかね多分。
2010-11-14 20:02:25@Cryolite string は struct string<char... seq> { static const char* value; }; const char* string<char... seq>::value = { seq... }; とかで。
2010-11-14 20:04:06@lyrical_logical f("hoge") が仮に string<'h', 'o', 'g', 'e'> を返せるとすると f は signature として string<'h', 'o', 'g', 'e'> f(char (&)[5]) を持つはずで,
2010-11-14 20:06:01@Cryolite ようは実引数に関数の signature が引きずられるのはなんかおかしいってことですよね。まあ確かにそうなんですがなんとかなるじゃろホイみたいな…
2010-11-14 20:07:21@lyrical_logical そうすると f("huga") は string<'h', 'u', 'g', 'a'> f(char (&)[5]) なる signature を持つはずで, f は戻り値の型だけが違うオーバーロードがなされており,これ無理じゃね? てぅ.
2010-11-14 20:08:05@Cryolite うーん全くおっしゃる通りですね漠然としか考えてませんでしたが、矢張りいくらコンパイル時定数とはいえ値の世界から型を作るのは無理そうですね。まあなら型で表現しなければいいじゃんとも思うんですが。型で表現せずにどこまで出きるかは全く知らないのでなんともです。
2010-11-14 20:10:24@lyrical_logical src[indices]... は値の操作としては問題ないはずです.多分,これを trailing return type あたりに載せようとしているんだと思いますけれど,実引数の名前は unevaluated なところにしか書けないはずです
2010-11-14 20:13:21@lyrical_logical コンパイル時定数で相当程度のことができるはずですけれど,関数のオーバーロードだけはどうしてもできないかと.コンパイル時決定な関数の呼び分けはできるんですが,こうすると全部の関数がインスタンス化されてオーバーロードより力不足なんでぐぬぬぬぬ.
2010-11-14 20:19:07@lyrical_logical 「これ無理じゃね?」があってこそ始まる C++ 黒魔術ストーリー!!!
2010-11-14 20:31:30@lyrical_logical はい!!! あと,「黒魔術」という言葉が頂けないようでしたら, C++ 言語仕様の堅いガードを必死に潜り抜けようと懸命にもがく様子と,お姉さまの堅いガードを必死に潜り抜けようとするも電撃で敢え無く撃退されてしまう様子を重ね合わせてみては!?
2010-11-14 20:41:06女子中学生でもテレポーターでもない変態が現れた… http://twitter.com/#!/Cryolite/status/3774418660622336
2010-11-14 20:43:49『とりあえず全部のコンパイル時定数の型はその値だけを含むsingleton type(178の型はintではなくInt<178>、"foo"の型は String<'f','o','o'>)。んで、それらの型は全て普通の型に暗黙変換可能(Int<178>→intなど)。』
2010-11-14 20:44:31とするのは、意外とドラスティックに見えて実はそうでもなくC++とかJavaとかHaskellの型レベル処理を劇的に使いやすく変えるんじゃないかなーということをこの前妄想していたのを思い出した。
2010-11-14 20:45:50int x; は、動的にはともかく静的には「なにかわからんけどintであることはわかる」から仕方なくintと抽象化しているのであって、123というリテラルは静的にも123以外にありえないのでInt<123>という静的な型を持ててよくて、もちろん抽象化したい時は時で自由にすればよく
2010-11-14 20:53:07