- 1 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:53:47 ]
- The C++ Standards Committee
www.open-std.org/jtc1/sc22/wg21/ wiki ja.wikipedia.org/wiki/C%2B%2B0x C++0x pc11.2ch.net/test/read.cgi/tech/1149440647/ C++0x 2 pc11.2ch.net/test/read.cgi/tech/1191842951/
- 496 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 18:35:05 ]
- >>492
コロンはコンストラクタの初期化子と競合しそうだな。
- 497 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 18:38:20 ]
- コンストラクタでは戻り値の型がないから大丈夫じゃね。
文法的な紛らわしさに関してはまああるかもしれないが。
- 498 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 18:46:28 ]
- ECMAScript4ってそんな感じじゃなかったっけ
いやだなぁ
- 499 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 19:30:15 ]
- function func() : int { return 0 ; }
だったか。ECMAScript4は文法キモすぎて見たくもない。 いつのまにかコンストラクタの初期化子まで採用してるし。
- 500 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 19:35:51 ]
- テンプレートもあるよ!
function func.<T>() : T { return new T(); }
- 501 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:35:43 ]
- ぐはぁ
- 502 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:42:16 ]
- しかしなぜ->なんだ
Haskellかよ
- 503 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 21:04:22 ]
- プログラミング言語 Scala
pc11.2ch.net/test/read.cgi/tech/1205156417/ Scala違いだ移動しる・・
- 504 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:49:10 ]
- returnでいいじゃんかよ
コンフリクトはないはずだ [] func() return int { return 0 ; }
- 505 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:50:51 ]
- なんかもうどうやってもキモいんだが。
- 506 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:52:00 ]
- ラムダ式くらい 100% 型推論でやってくれ。
- 507 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:53:18 ]
- そもそもどうしてラムダと形を合わせたいんだ
コピペのためか?
- 508 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:56:04 ]
- 関数型言語的には→なんだから、
->でいいんじゃないの?
- 509 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:58:39 ]
- 関数型言語的にどうかは知らんしどうでもいいが
C系言語的には->は昔からずっと間接参照演算子だ
- 510 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:13:55 ]
- 美少女中学生的には -> と [] はブラのホックの両端だから
- 511 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:26:17 ]
- >>504
それ、俺も思っていたんだけど、 C++の文法としては、何か違和感あるよね。 ところで、@と$がC++の規格にないのは、何か理由があるの?
- 512 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:30:21 ]
- [] int foo() { ... } で不都合があったから -> になったんだと思うが、
どんな不都合があったの?
- 513 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:50:13 ]
- returnsのほうがいい
- 514 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:53:10 ]
- >>512
(charからcharへの関数)を引数に取り(intからintへの関数)を返す関数 を引数に取り(charからintへの関数)を返す関数の型を、 C++03(「関数」は「関数へのポインタ」とする)とC++0xで書いてみてくれ。
- 515 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:58:27 ]
- int (*(int (*(*)(char (*)(char)))(int)))(char) のことだよね?
- 516 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 00:10:24 ]
- グロい
- 517 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 00:11:59 ]
- まぁ現状十分汚い言語なんだから、
多少醜くなってもいいじゃん
- 518 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 00:14:30 ]
- >>517
いいこと言うなあ。君のそのレスで俺の気持ちは吹っ切れたよ。
- 519 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 00:19:47 ]
- []([]([](char)->char)->([](int)->int))->([](char)->int)
- 520 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:22:09 ]
- typedef char (*ctoc_t)(char);
typedef int (*itoi_t)(int); typedef int (*itoc_t)(char); typedef itoi_t (*ctoc_to_itoi_t)(ctoc_t); typedef itoc_t (*answer_t)(ctoc_to_itoi_t); こんな型何に使うかは知らんが、使うとしたら きっと近くでitoc_t型やctoc_to_itoi_t型の変数も必要になるだろ ならそんなキモい書き方しないで必要なものをtypedefで作るべき
- 521 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 06:35:41 ]
- >>519の方がわかりやすいが?
- 522 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 07:06:50 ]
- >>519
これは従来のアナルっぽい記法よりは読みやすいな
- 523 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 07:15:37 ]
- >>511
いまさらtrigraphやdigraphの要るような記号追加するのもねえ…ってことじゃないかと予想
- 524 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 07:38:26 ]
- >>523
そういう理由なのかなぁ。 しかし、trigraphやdigraphって廃止しても、それほど互換性の問題も無いんじゃないかなとおもったりするんだけど。 西側の、なまじ7bitで全種類の文字を表せちゃったので、悲惨なことになっている連中も、 結局使ってないみたいだし。
- 525 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 09:39:20 ]
- >>521
まずそんなものを書く状況自体が無いな。 あっても >>519 も読みづらいから typedef 使うわ。
- 526 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 11:51:29 ]
- C++でtypedefを禁止したらどんなカオスなコードになるか見てみたい
- 527 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 11:53:44 ]
- >>526
template メタプログラミングがかなり出来なくなる気が ...
- 528 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 11:58:25 ]
- >>526
decltype と auto を駆使することになる
- 529 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 18:05:21 ]
- あーはやくautoが欲しい
- 530 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 19:02:48 ]
- 正直、auto 以外、いらん。初期化もまぁあればいいね、程度だし
- 531 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 19:46:54 ]
- ここまでいじっちゃうともう新しく言語作った方が早い気がするしな。
- 532 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 19:51:44 ]
- Cとの互換性をとりつつ拡張するのに苦労してんのにそんな事言うなよ
- 533 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 20:12:56 ]
- 互換性無視できる
ネイティブディレクティブとか作ろうよ
- 534 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 20:36:05 ]
- もう互換性なんかとっくにボロボロなのに今更何を
- 535 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 21:37:43 ]
- >>530
初期化指定子で初期化指定が完了するのは美しいと思わんか
- 536 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 21:54:12 ]
- なぁ、これは俺の思い過ごしかもしれんのだが
ヒープ領域って誰が管理してくれるんだ? ラムダ返されて、それ引数に関数呼び出して 関数の中でグローバルに束縛されて... ... ... でも, らむだはデストラクションしないとまずいんだろ?
- 537 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 22:07:15 ]
- 関数を動的に生成してるわけじゃないだろ
- 538 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 22:17:48 ]
- 536 に便乗で聞くけど、
例えば C# の場合、ローカル変数を参照するようなラムダ式書くと、 クラスが自動生成されて、ローカル変数参照がメンバ参照に置き換わるんだけど、 そういう状態になった場合、デストラクタはどこで呼ばれるの? ローカルスコープ内でしか使わないラムダ式ならいいけど、 例えば、「ラムダ式を返す関数」みたいなの作っちゃった場合。
- 539 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 22:21:56 ]
- そんなのローカル変数のポインタ返してるのと一緒だろ
クラッシュしても自業自得で済まされる話 C++はプログラマを全面的に信頼する言語ですよ
- 540 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 22:24:33 ]
- >>537
あんまマジにシンタックス見てないんであれなんだが こんな感じの関数書くとするやん? f(x, y) { return [copy x]lambda(y){+ x; ...} } この場合, x はスタックじゃなくてヒープに取るしかないと思うんだ で, g(f(1), f(2)...) とかな感じで, 呼び出したら? f が返す関数に束縛されてる x がコピーされた領域は誰が回収するんだろ? と、思った
- 541 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:01:43 ]
- ん、よくわからん。
スタックじゃないの?
- 542 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:04:43 ]
- alloca() を思い出した
- 543 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:08:10 ]
- new [...] (...) {...}
はないの?よくわからんけど
- 544 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:23:24 ]
- ラムダ式は関数オブジェクトのシンタックスシュガー
なので、単なる一時オブジェクトとして生成されると思う
- 545 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:24:34 ]
- 関数から返せないということか。
何かエセっぽいな。
- 546 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:28:11 ]
- C的に考えると、それでいい気がする。
- 547 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:30:37 ]
- 折角だからカリー化とかしたいのになあ。
- 548 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:31:35 ]
- ラムダキャプチャーを参照でなく値(コピー)にしたら返せる
関数オブジェクトと同じ でも、戻り値の型を特定できないかも、新シンタックスで可能?
- 549 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:33:07 ]
- カリー化は手動だな
- 550 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:33:48 ]
- >>544
となると、>>543 みたいな、ラムダ式をヒープに取るような構文が必要じゃない? (スマートポインタ使うにしても、まずはただのポインタが要るし。) それか、ラムダ式から生成される関数オブジェクトが 適切な operator = を実装しててくれるなら別にどうでもいいことなのかな。
- 551 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:37:49 ]
- >>550
あっても困らないけど、なくても良いと思う ポリモーフィズムは必要ないし、必要なら従来の関数オブジェクトがあるし
- 552 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:13:58 ]
- 本物のC++プログラマは動的解決をしない。
本物のC++プログラマはコンパイル時に解決する。 コンパイラでできなければ、プリプロセッサでやる。 プリプロセッサでできなければ、それはやる価値が無いのだ。
- 553 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:16:03 ]
- new を入れたのが間違いの始まりだったんですね
- 554 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:30:05 ]
- プリプロセッサ(笑)
- 555 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:36:14 ]
- タイトルはどうなるんだろう。
「本物のプログラマはJavaを使わない」 あたりかな
- 556 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:36:39 ]
- 本物のプログラマネタが分からないのは
流石に本物のプログラマとは言えないな。
- 557 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:45:50 ]
- 本物のプログラマがわからなければ、そのネタは理解する価値が無いのだ。
- 558 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 01:03:02 ]
- >>555
間違いなく言語と環境をごっちゃにした反論が帰ってきそうなタイトルだなw
- 559 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:38:19 ]
- conceptがまだドラフトに入らないのが気になる
一番楽しみなのに
- 560 名前:デフォルトの名無しさん mailto:age [2008/05/04(日) 00:39:07 ]
- 独立wordingの方でまだまだ直しが続いてる。
- 561 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 18:01:34 ]
- ここで聞くか、Boostスレで聞くか迷ったんだけど、
Unordered associativeコンテナの、bucket関連のメンバってなんに使うの? 規格読んだだけだと、どうもよくわからないんだけど。 あるキーがどのbucketに属するかのインデックスを返されたとしても、 実際のbucket単位に直接アクセスする方法って無いよね? 普通に要素へのイテレータしかないみたいだし。 そのどのbucketに入れられているかってことが分かって、ライブラリを使う側の人間にとって、何がうれしいの?
- 562 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 19:14:44 ]
- >>561
begin(i),end(i) で local_iterator を取得できたような。 ハッシュの分散結果をどう使うかってことなので、カスタムハッシュ関数次第 じゃないか? まあ通常はあまり使わないかも
- 563 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 19:23:03 ]
- どっかのbucketにばっかり入っちゃうようなデータで、そのせいで遅くなるようなときに
調査するためじゃねえの
- 564 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 19:27:20 ]
- >>561
詳しいドキュメント読んでないから分からんけど、たぶん同一 hash 値だったら 同一の bucket に入ることが保証されるはずだから、次のような使い方ができる。 次の問題を考える: 二次元平面上の点が大量に与えられる。これを前処理して 新たな点 p が与えられたときに p に最も近い点を求めよ。 こんなときに、最初の二次元平面上の点に対して、ハッシュ関数を (x座標値/1000)×(y座標値/1000) なんかに設定したコンテナを用意すると 元のデータが結構ばらけていたら、「同一 bucket 内に入るデータを全部調べる」 みたいなアルゴリズムで結構効率的に解ける。
- 565 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 19:59:38 ]
- おもろい
- 566 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 20:46:02 ]
- >>562
本当だ。 引数を取るb.begin(b), b.end(b)があったのか。 local_iteratorは、あるbucket内の要素のイテレータとは。 しかし、>>564には疑問だな。 例えば、その点pのハッシュ値が、ちょうどbucket単位の境にあった場合、 点pに最も近い点は、別のbucketに入るんじゃない? すると、隣接するbucketも調べないといけないよね? 少なくとも二つ、大抵の場合は三つ。 それに、規格にあるのは、 >Keys with the same hash code appear in the same bucket. だけで、似たようなハッシュ値が同じbucketに入るとは規定してないし。 隣接するbucketに入るとも規定されてないよね。 あくまでハッシュという名称を使っているだけで、実装じゃないし。
- 567 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 21:01:51 ]
- 境界の違うハッシュを2つ使えば?
(x/1000)*(y/1000) と ((x+500)/1000)*((y+500)/1000) みたいな
- 568 名前:564 mailto:sage [2008/05/05(月) 21:33:30 ]
- >>566
bucket の番号を用いる例のためだけに、アルゴリズムの細かなことを書くのは 面倒だったから、本当に方針だけを書いたつもりなんだけどなあ。 まず、点を含む領域以外も見ないといけないのはそのとおりで、 ちゃんとやるには、点を含む領域から近い順に探索することになる。 (それまでに見つけた最も近い点までの距離を覚えておき、 見る必要のある領域を限定していく) 見る領域に対応する bucket の番号は、領域の座標値が分かっているのだから 領域座標 → ハッシュ を計算してやった後に ハッシュ → bucket 番号と取得する。 このとき、隣接領域で bucket 番号が隣接している必要はない。 詳しいことは、適当な計算幾何学の本を読んで欲しいところ。 こういうのはバケット法などの名前で知られている割と標準的な技法。
- 569 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 21:36:55 ]
- えぴが陰毛茫々じゃないから
進みが遅いと思う
- 570 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 21:40:38 ]
- >>566
いや、だから規格では、同じハッシュ値のキーが同じbucketに入ってるって事ぐらいしか、 規定されてないような気がするんだけど。 似たようなハッシュ値が同じ、あるいは近いオフセットのbucketに入っているかもしれないとは書いてない。 そりゃ、大抵の実装はそうなるだろうけど。
- 571 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 21:40:59 ]
- 間違えた、>>568
- 572 名前:デフォルトの名無しさん [2008/05/05(月) 22:01:44 ]
- >>561
cpplover.blogspot.com/2008/05/c0xunordered.html
- 573 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 22:05:07 ]
- >>570
似たような点を同じハッシュにするって話じゃないの?
- 574 名前:564 mailto:sage [2008/05/05(月) 22:10:03 ]
- >>570
なんで似たようなハッシュ値が近いbucketに入る必要があると思うの? そういう必要は無いですよ、と588で > このとき、隣接領域で bucket 番号が隣接している必要はない。 と明記したつもりなんだけどなあ。 具体例で説明すると、たとえば 1000×1000 のメッシュに切って、 (x/1000)×(y/1000) % 100 をハッシュ関数として設定したとしよう。 ここに (10000,10000) の点 p が与えられたとしよう。 この点を含む領域に対応するハッシュ関数値は (10×10) % 100 = 0 だから、 ハッシュ関数値 0 に対応する bucket を持ってくればいい。 (点 p に対して bucket(p) を実行することが、この操作に対応する) 次に、この点を含む領域の左側の領域を調べることにしよう。 左側の領域の座標に対応するハッシュ関数値は (9×10) % 100 = 90 だから、ハッシュ関数値 90 に対応する bucket を持ってくればいい。 (p を左に 1000 だけ平行移動した点 q に対して bucket(q) を実行することがこの操作に対応する)
- 575 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 22:34:13 ]
- で、0x関係あんのか
- 576 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 22:41:03 ]
- >>574
関係ねーだろ10000回染んで来い
- 577 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:41:50 ]
- そんなにdelete thisできないな
- 578 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:17:58 ]
- >>570
つうか、一体何が疑問なんだ 同じハッシュ値のキーが同じbucketに入ってるって事が規定されてりゃ十分だろう 同じハッシュ値になるようにハッシュ関数を作れば同じbucketに分類されるんだから
- 579 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 05:45:07 ]
- ああ、なるほど。
似たようなキーを同じハッシュにするのか。 それで(x座標値/1000)×(y座標値/1000)だったのか。
- 580 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 21:04:03 ]
- レベルが高すぎてよくわからん
- 581 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 21:05:26 ]
- そんなに高くないよ
情報系の学校入れば絶対習う程度
- 582 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 21:26:48 ]
- 学無くても考えれば分かりそうな。
- 583 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:06:41 ]
- 修学旅行での温泉の脱衣場の洗濯カゴみたいなもんだ
一つのカゴで一人の美少女中学生をイテレートできる 美少女中学生は控えめだから棚の下の方にハッシュされてるという寸法さベイベ♪
- 584 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:08:43 ]
- 下着がなくなってたりするんだな
- 585 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:54:27 ]
- 露骨なエロで興奮するあたり、それらが控えられた萌えに欲情する若者とは違うという部分がみえみえなスレだな。
勢力の足りないおっさんが無理にネタ振らなくても良いんだぜ?つまらないだけだから。
- 586 名前:デフォルトの名無しさん [2008/05/07(水) 02:20:45 ]
- age
- 587 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 03:27:54 ]
- >>585
つまらない。
- 588 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 09:42:13 ]
- どうでもいいよ
- 589 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 03:55:48 ]
- ここんとこ寒いね
- 590 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 04:05:16 ]
- うんそうだね
- 591 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 04:34:23 ]
- 今までが暑くて相対的に寒く感じるだけ。
平年並みだろ。
- 592 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 21:41:35 ]
- それだけ暑いのが続けば「平年並み」の気温も底上げされててもいいんだがなあ。
- 593 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 18:02:04 ]
- 平均気温は過去20年のデータで計算するから、20年間で急激に気候が変動してると追いつかない。
そんだけ温暖化が深刻ってこったな。
- 594 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 18:45:41 ]
- strong typedef って入るんだったっけ?
- 595 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 19:32:54 ]
- ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2141.html
これか? 入る見込みは無さそうだねぇ。 ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2565.html >Not ready for C++0x, but open to resubmit in future BOOST_STRONG_TYPEDEFでもつかっておけば。
- 596 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:20:55 ]
- strong typedefってどういう物?
usingとかとは違くて?
|

|