よく分からない話

一つめのアレは実は「え、RVO?」とか思ってたけど、そうかmakeSの呼び出しがRVOされるのかー。
C++.Tのオーバーロード解決の話はなんか

void f(int);
template<typeid T> where { ConceptA<T> } void f(T);
template<typeid T> where { ConceptB<T> } void f(T);
template<typeid T> typename enable_if<is_same<T, double>, void>::type f(T);

とかの場合はどうなるんだろうと思った。にはさんが思いついた方法で書き直すと、

template<typeid T> where { T ~ int } void f(T);
template<typeid T> where { ConceptA<T> } void f(T);
template<typeid T> where { ConceptB<T> } void f(T);
template<typeid T> typename enable_if<is_same<T, double>, void>::type f(T);

で、一番下のヤツは場合制約ベースで解決できんのかこれ…Overload Resolutionのルールをちゃんと理解してないから知らん。いや、制約ベースで考えたとしたら、特に制約ないから一番適合度合いが低い扱いになるのかな?やっぱり知らん。
あと、

template<typename T>
struct id { typedef T id; };
template<typename T>
void f(T) { printf("T"); }
template<typename T>
void f(typename id<T>::type) { printf("id<T>::type"); }
int main() {
    f(1);
    f<int>(1);
}

がgcc4.4, 4.6(trunk), VC(の多分そこそこ新しいやつ)でコンパイル及び実行結果が違うけどどれが正しいのか的な。
f(1)ではそもそもテンプレート版が呼ばれたらおかしいのはいいとして、f(1);は多分曖昧でコンパイルエラーになるはずで、その点では4.4が期待する動作だけど規格読んでも根拠見つけられなかったので知ってる人はどこか人目につきやすい場所にFCDか何かのパラグラフとセクションを示せばいいんじゃないでしょうかみんな喜びます。

Boost.勉強会#2にいってきた話を書こうと思うけど、めんどくさいからどうしようか悩んでいる

勉強会で配る用の名刺を作らねばとプリンタのインクと名刺用の紙を買ってきたわけですが、前日の夜にハードディスク整理を始めたから名刺作る時間がなくなってきた上に、家のプリンタが大きすぎて名刺印刷できなかった。やることがあるときに限って掃除をしたくなるのは何も部屋だけではないということが分かる、心温まる一場面ですね。仕方ないのでわんくまに参加したときに作った名札を持っていくことにした。この時点で7時。本当は開始の10時に間に合うように出発したかったけどそれなりに急いで新幹線に乗ったわけです。で、セッションのお題目を確認するためatnd開いたらなんと13時からであった。まさかの開始時間詐欺!訴えてやる!!!!!
QJD(急に時間ができたので)の私は前回江戸に来たときの続きで秋葉原を見て周ることに。日中のクソ暑い中、暑さでへばった犬(not めるぽん)のような表情で歩いていると突然「ちょっといいですか」と声をかけられ、まさかアイドルのスカウト?!などと思うわけもなく持ち物検査をされた。とてもいい日ですね不審者ざまぁwwwwwwwwwwwwwwwww死ねやwwwwwwwwwwwwwwwキモヲタがwwwwwwwwwwwwwwwwwwwwww
そんなわけで適当に駅前のカレー屋で昼食にして会場へ向かった。神保町A9出口は大変遠いですし、なんであんなに地下深いんですか?まぁ最終的に江戸にある全ての駅の各部分集合Sの順列全てを路線として作るわけですから、たかだか数十m程度の深さでガタガタ言ってはいけないのかもしれませんね。一生掘ってろボケが。
会場に入る前に、RedBullを探してあたりをうろうろしていた。それにしてもみんなtwitterで「会場到着」とか書いてるのに全然会わなかったんですが何か私だけ結界の中にいたんですかね?江戸こわいわー
RedBull買って飲みながら会場のビルに入ると、ドアの前に大きな犬がいたのでなんでかなーと思ったらめるぽんさん(not 犬)だったのでびっくりも何もしなかった。「あ、お久しぶりです」などと挨拶をするとさらりとセキュリティカードを渡されて、じゃあ続きお願いしますとビルの奥に姿を消した。すごくナチュラルに会場案内を託されて私はドアの前で右手にRedBullを、左手に携帯を持ってtwitterをしながら案内についた。傍から見れば全くやる気ない人ですがやる気ないので問題ない。開始時間を少しすぎて遅れてくる人もいなくなった頃、会場に入ってeldeshさんの隣の席に座り、バッテリーが死んでいるノートPCに電源入れようとしたら、おいここ電源タップ八分やないか!!!今度からはちゃんと延長コードもっていこう。それと便座カバー。結局隣のテーブルの電源タップを引き寄せて接続した。大変厚かましくてすみません。次からは延長コード持参しますから赦してくだしあ><電源をつないでからは、twitterしながら変なコード書きながらセッションを聞いていた。
勉強会の内容はtwitterC++の話題まとめシステムであるところzakさんがとぅぎゃってくださっている(ブラクラ的重さらしいです)のと、アキラさんの日記、その他適当にググってそちらをご覧あれ。まぁこの日記で「勉強会行った」系の話をしてその内容について触れることなんてほとんどないというのは周知の事実なので問題なし。そういえば「(Boost.Interfacesを)もっとカッコいいイケメンにしろ」とアキラさんが言っていたので、まぁそのうち考えたいところですね。
懇親会。席の人と話していると何やら突然一冊の本をさし出された。え、サインですかそうですか、というか一般人にサイン求められてもそんなのあるわけないでしょう!お前はサインあるんか!!!まぁ適当に書いた。するとまた本をさし出された。サインらしい。気付けば魔導書に著者のサインしてほしい人が懇親会場に著者巡りの列を作っていた。観測できた範囲ではどうやら、…→kinabaさん→私→melponさん→アキラさん→…という順に回っているようであった。「サインお願いします」と差し出される本にずらりと並ぶ著者のサインと、私の残念な字が対比になってより他の方のサインがカッコよく見える効果がってやかましいわ!!!
ほどよくアルコールが回ってきたのでふらふらと他の席へ行ったりした。「PDF内のテキスト検索って遅いじゃないですか?あとCtrl-A Ctrl-C Ctrl-Vで全文コピペしたりすると文章の前後が入れかわったりするけどあれって実はたとえ一行の内容でも数文字とかで切って、そのブロックごとに位置を微調整してるからみたいなんだけど、そのお陰で見た目「あいうえお」となってても実は「あい」「うえ」「お」と切れてるもんだから単純なテキスト検索はひっかからなくて各断片の座標をもとに文字列を復元しないと検索できないクソが†uck」という話をした。あとエクセル方眼紙の話とか。
懇親会のあとはカラオケにいった。もともと一人でオールナイトする予定だったところ、なんだか15人ぐらいでとりあえず2時間カラオケやったあと改めてオール組は入りなおすということに。部屋に入ったあとらんはさんはずっとPCに向かってたけど何してたんだろう…
2時間後一旦退室して、オール組(最終的に7人)はややこしい形の交差点の斜向かいにあるカラオケ屋に入った。大都会エド(笑)の交差点はみんなこんなんで渡るの苦労しますやう゛ぁい。近い将来都民全員が一つの交差点で同時に事故って死ぬ。オールナイト中、kinabaさんとはみがきさんはずっとマリ姉ばかりを歌っていたことぐらいしか記憶にない。夜が開ける頃にはみんな死にかけていた。秋猫さんとれーらさんと私は、翌日の予定(リナカフェに行って「りなかふぇなう」とpostする)を考えて、秋葉原のネカフェで仮眠をとった。ところで寝る前にこのようなpostがあったのだけど、遠出前なのにオールとか付き合っていただいてすみません…
昼。前日のカレー屋の隣でバーガーなど食べて、銭湯に行った。それにしても行く場所行く場所みんな地形がおかしい。建物が木造からコンクリートになっただけで道路を整備していない街が、そこにはあった。ていうか、江戸だった。江戸はもっとグラフ的な意味で道を整備するべきじゃないですかね!ダイクストラもびっくりですよ!エドガー・ダイクストラだけに!
それはそうとあそこの銭湯、備え付けのシャンプー粗悪じゃなかろうか…頭洗ったらやたらと髪の毛同士が絡まるようになった。ジェットバスがあったのだけど、あれの噴射を尻の穴あたりにあてていた(アナニー的な意味ではなく)。浣腸ってされたことないけど、されたらあんな感じじゃないかなーと思った。
銭湯を出て、広間で涼んでいるとtwitterこんなpostがあったので、早速リナカフェに向かった。着いたら、らんはさんとにはさんがいた。にはさんが分からない話なのに私が分かるわけないので私はとくに必要なくて大変悲しくて、大変悲しみながらよくわからないC++の話をしてた(長いので別記事で)。
夕方6時頃になって2人は仮面ライダーの映画にいくとかでその場は解散しました。私は帰ろうと思っていたら、どういう経緯かは聞いてないけど秋猫さんとれーらさんはリナカフェで会った鳥谷さんと男の娘カフェかメイドカフェか男装カフェに行くという話になっていたので、2次元ならともかく3次元ではそんな属性はないがご一緒させていただいた。行ったのは男装カフェだった。
男装カフェは割と男性でも入れるというか男装であること以外は普通なので普通だったけど、店員同士の会話は男ってよりは女子校の会話という感じだった。まぁ私は女子校とかテレビでしか見たことないのでよく知らんけど。適当に秋猫さんをいじった後、帰る頃合いになったので店を出た。そしてふとリナカフェにはこんさんとかぱいさんとかいたなぁカフェ行く前に挨拶すればよかったなーなどと思った。
帰りの新幹線は指定席の切符買ったけど、窓側じゃなかったし、しかもコンセントがある列車だったので、ダメ元で自由席の車両を探したら空いてる窓側の席を見つけたので、そっちにした。指定席の切符を買っておいて自由席に座るなんて、まさに外道!!
江戸駅で買ったカツサンドはうまかった。箱見たらなんか神戸とか書いてありましたがエドはいつから神戸になったんや?そのあとじゃがりこをボリボリしながらこの日記を書き始めた。

この記事に登場した人物:

(だいたい話に登場した順、@付きはtwitter id)

user-defined string literalはliteral operator templateでほげほげできないと何度言ったら…

私自身何度も疑問に思ってはその度に調べていたし、しょっちゅうtwitter上でも話題になるのでここに書いておきましょう。
すごく手短に言うと、

template<char ...str>
struct hoge_t {};

template<char ...str>
constexpr hoge_t<str...> operator ""_hoge();

このような定義(ここではliteral operator template形式とでも呼ぶことにします。)は、決してuser-defined string literalに対するoverload resolutionで選ばれることはないのです。literal operator template形式が使えるのは、「100_mega」や、「3.14_oyoso」など、オペランドが整数、浮動小数点数の時に限ります。

C++WG Adhoc Conferenceに行ってきました(の書きかけ)

出発〜懇親会まで

5/29、このような会議があるということで、参加させていただきました。
赤坂で10時から、ということで、だいたい3時間半あればいけるかなと思ってそんな感じで時間を見て出発した。お近くのみどりの窓口にて新幹線の指定席の予約を取ろうとすると、思ったより遅い時間の予約しか取れない。仕方ないので帰りの新幹線の指定席の予約だけとって、行きは自由席にした。しかしここでまっこと残念なことに買った切符で改札が通れない。駅員さんに「あのーこの切符通らないんですが…」と尋ねてみるも、しばらく分からず。そして駅員は言ったのです、「この切符、6月27日(6月第四土曜)から有効ですよ」と。あぁ、私はとうとう目もおかしくなっていたのですね、分かります。
そんなわけで窓口で当日の切符に変更してもらって、ようやく出発。このときにもうなんか時間やばいんじゃないかなーなどと思いつつ、とりあえず新幹線に乗ってから落ち着いたところでgoogle mapで所要時間を調べたところ、あちゃーこれはもう遅刻決定ですよ。まいりましたね。とりあえず光成さんにメールを入れておきつつ、twitterにもpostしておくとredboltzさんから「伝えておこうか?」とありがたいreplyが。いやーうれしいですね人とのつながりは。twitterで広がる仲間の輪(笑)
遅刻連絡を入れたところで、幸運なことに電源が使える車両だったので、先日とんできたメールに添付されていたコメントをAndroid端末で確認しながら、持ってきたラップトップでFCDを読むことに。あー二つヂスプレイがあるって快適ですねという気分で、一通りのコメントをチェックしおわった頃には新横浜でした。一方twitter上に割と「今起きた」とか「間に合わない」などという不届きなpostがあったのは一体どういうことなんでしょうか。
さて、新幹線を降りて、新橋まで山手線で移動して、そこから地下鉄を使うわけですが、あの路線図、何度見ても慣れないですね。あの、大量のミミズがのたくったような路線図。あれはもう路線案内をビジネスとして成立させるためにあんな複雑にしているとしか思えない。陰謀や!これは陰謀なんやで!
半蔵門線溜池山王で降車して、それからまた地上まで息を切らしながら上がるわけです。深すぎますね。酸欠で死ぬかと思った。
ようやく会場のあるビルに到着するわけですが、あれーエレベーターが12階までしかないよー?→12階からもう一つのブロックのエレベーターに乗る→あれーついたけど見つからないよー?→東館でした→東館のエレベーターどこー?→あれー東館のエレベーターあったけど12階までしかないよー?→12階からもう一つのブロックのエレベーターに乗る→あった!という具合に迷いまくって、ようやく着いた頃には表決とってました。さすがに来たばっかりで何も把握していないので、賛成も反対もできませんでしたが。落ち着いてあたりを見回していると、場にいる人全員がC++に精通し、C++について何か思っているんだなーと実感して、それだけで背筋がゾクゾクしましたね。なお、会議の内容などはググってください。
DIYの精神に則って、差分だけ書きます。くらいおらいとさんはオーラが出ていたのですぐに分かりました。kikairoyaさんは、おじさんだと思っていました。ごめんなさい。あと私のラップトップの壁紙は全然あれげじゃないです普通です!きっと見間違いか何かでしょう。あとお昼ごはんのとき、「0xだったらプリプロセッサもういらないんじゃね?」という話になったので、「あれは構文でっちあげ器なんです!」という主張を展開してきました。なぜ納得していただけないんでしょう?C99から可変長マクロ引数も輸入されたというのに!ちなみに別の日の話ですが、諸般の事情により今回は不参加だったuskzさんからは、「最初みたときなんて読み易いコードなんだ」というコメントをいただいています。ですよね!!!まぁプリプロセッサがどうとかより、モジュール機能は切実に欲しいです。namespaceとかtemplate spacialization, ADLのあたりが絡んでくると難しいだろうなーと思いますが。
会議が終わると、問い詰める会です。こっちはC++の人に加えて、各方面の人が集まりました。私は終始飲みながら席をふらふらしてました。ところが、新幹線の終電が迫ってきたわけです。一応日帰りのつもりだったのですが、面白くなってきているので、予定を変更して一泊することに。しかし席は朝に予約しちゃったもんだから、あわてて新橋まで行ってみどりの窓口で次の日に変更しました。ご予約は計画的にね!
さて、割と酔いが回った状態で飛んでいったので、会場の最寄り駅を降りたあと、道どうだっけ…などという自体に陥ったわけですが、ウルトラスーパーヒューリスティックな探索で会場を探索して帰ってきました。やりました。

カラオケ

  • ゆゆさんマジライブハウス
  • めるぽんさんマジサンホラー
  • くらいおらいとさんマジ津軽
  • アキラさんマジ歌いたい放題
  • egtraさんマジCC
  • はみがきさんマリ姉
  • 私はいつも通りでした

明けて

  • くらいおらいとさんと二人、渋谷に投げだされてネカフェを探してうろうろ
  • 「こんな都会のど真ん中に坂とか大阪じゃあ絶対ないですね」
  • 感想:東京は都会の皮を被った田舎だねこりゃ。
  • ネカフェ発見
  • 各自適当に休憩したのち店を出ることに
    • イスで寝る
    • celeron Dの分際でリネージュIIとかどうすんねん…おいアップデートとかすんなよそもそもこの環境でプレイできんやろ
    • とりあえずtwitterを起動する
    • BGMに包まれて寝ようとyoutubeで動画を開いていると突然のシャットダウン。何事かと思ったけど、これ多分過熱からの保護機能じゃなかろうか
    • またアップデート。多分同じ内容の。おいシステムのバージョンぐらい確認しろよ!
    • あれ?「再起動後は元の状態にシステムを復元します」ということは、リネIIのアップデートもなかったことになってるだけか!アホか!
    • もうマシン使うの止めて寝よう…
    • 右を向いて寝る→首を痛める
    • 左を向いて寝る→首を痛める
    • 結局申し訳ないと思いつつ、机の上の奥のほうに足をほうり出して寝た。
    • 断続的に寝てたので全然疲れがとれた感じがしないまま、ネカフェを出る。結局あのネカフェはネットすらまともにできないのであった。
  • 歩いている人は、早朝とは違う雰囲気で、普通の人が多かった。

神保町

  • とりあえず着いたものの、どこに何があるかとか全然しらないので適当にそのへんを歩いていたら、何軒か古本屋があったので1時間ほど回っていた。
  • 字源辞書とかあって、ちょっと欲しかった
  • はらがへってきたのでラーメン屋を探したが、なかなか入りたい店が見つからなかった。そこで急に「秋葉原に行きなさい」という電波を受けとったので、行くことにした。

秋葉原

  • JR秋葉原 電気街口の前
  • 特に何も買っていない
  • まず康龍でラーメンを食う
  • ゲマに入る。上に伸びてるけど上下の移動手段の配置がつぎはぎすぎるやろ
  • 魔窟の全容
  • 前回来たときは真夜中だったし全然見てないので、街中をじっくり回ることに
  • 木彫りサイバスター
  • ガンダムカフェ
  • ヨドバシの前に行くとQOIでトイレに。トイレットペーパーは、ありました。
  • 裏通り
  • 昭和通りのほうからもういっかい電気街のほうへ
  • 日本橋堺筋沿いに縦長に作られてるけど、ここは一箇所に集中している。裏手はカオスすぎる。
  • まんだらけの近くは行ってません
  • 帰る

Xmonadの設定など

Xmonadを導入しようとして設定したこと

でもなんか漢字とかの描画が残念な感じになったので、Xfceセッションでログインしたときにフォント描画の設定してるんどこやーと探しまわった。

  1. /usr/share/xsessions/xfce4.desktop の設定から、startxfce4が走る
  2. /usr/bin/startxfce4 が設定があるディレクトリを探す
  3. /etc/xdg/xfce4/xinitrc がウィンドウマネージャとかセッションを起動する。で、ここで起動するxfsettingsdっていうdaemonがやってるっぽい。

結局それしか分からなかったし、XsessionとかXresourcesとかも探したけど原因は分からなかった。ところが、ふと、残念になってるのはメニューとかテキストボックスだけっぽいことに気付いたので、これはなんかシステムがデフォルトで使うフォントの設定じゃないかなーと思って.fonts.configを適当に設定したらうまくいった。

あとxmobarのほうは多分自分でutf8サポートのオプション付けてビルドしないと無理っぽいのでcabal installしよう。

劇場版 魔法少女リリカルなのはThe MOVIE 1stを見にいきました

なのはさんフェレットユーノ君をかばって前に出たとき、当然のように彼の位置は明らかに絶妙なポジションでした。初対面の女の子のぱんつを覗こうとするなんて、劇場版でも淫獣っぷりは健在ですね。

C++/CLIについてのよくある誤解

以前にも書いたような気がしますが、もう一度書きます。C++/CLI仕様の邦訳)は、.netからC++やその他ネイティブコードのライブラリを楽に使えるようにするためと、そのための作業を楽に行うための言語です。「.netで使えるC++」ではありません。そういうことを言う人は悉くこの言語の厳つい顎で頭を砕かれ、手足をもがれて、腸を食らい千切られ死にます。それが摂理なのです。あらがえません。C++/CLIは大きく分けてC++と、C++風構文を持つ何か.netっぽい言語(ここでは仮に「Cヰ」と呼びましょう)からなる、キメラです。二つの言語のコードは一つのファイルに混ぜて書くことができます。C++の部分はそのままC++です。何も違いはありません。GCもありません。ありませんが.netのGCにネイティブオブジェクト(要するにC++で作ったオブジェクト)を通知して管理させる方法はあります。interfaceだとか多重継承できないとかそういうのもありません。interfaceはあったような気もしますがVCのC++に対する独自拡張なので知りません忘れてください。今拡張という言葉が出てきましたが、C++/CLIC++の拡張ではなく、別の言語です。これは真面目にです、別の言語としての規格がちゃんと存在します。それから以前はC++のマネージ拡張というのがありましたがそれも忘れてください。こっちはC++への拡張ですが、構文が違うだけです。誤解しないでほしいですが、私はC++/CLIがクソである、と言いたいわけではありません。しかしマネージ拡張はクソです。
話を戻しましょう。どんな感じの言語かは、ここを見ればだいたい掴めると思います。掴んでください。C++は普通にC++ですが、Cヰはどうでしょうか。まずtemplateが使えません。代わりにgenericsが使えますが、これは構文がC++風なだけで.netのそれそのものです。今、「だったら何も問題なくね?」と思いましたか?

template<typename T>
typename F::result_of_foo func(T & obj) {
    return obj.foo();
}

とても人為的な例ですが、まずこれ相当のものは書けません。今から理由を説明しますので慌てないでください。とりあえず、これと同じことを意図したCヰの擬似コードを示します(あくまでも擬似です)。

generic<typename T>
??? func(T ^ obj) {  // ^ 記号はC++の*(ポインタ修飾)みたいなものです。
    return obj->foo();
}

断わっておきますが、Cヰではメンバに属さないメソッドをアセンブリの外に公開できません。このへんはCLIの仕様によるところです。なので実際にはCヰのクラス(これはあとで説明します)の静的メソッドにするべきですが、ここでは対比として分かりやすくするためにこう書いておきます。ちなみに名前のガイドラインも守ってませんが、そのへんはもういいでしょう。あなたはもう大人なのですから、今言いたいことの本質がそこではないことぐらい分かるはずです。
まずobj.foo()というメソッド呼び出しがコンパイルエラーとなります。それと、???を書く術がありません。C++の真似してるクセに使えなさすぎです。ですがこれには訳があります。
genericなメソッドやクラスは、コンパイル時だけで世界が閉じるわけにはいきません。そのようなメソッドを含むプログラムから生成されたアセンブリを利用する側からでも、彼らが指定した型でメソッドを利用できるような仕組みになっています。当然アセンブリを利用する側が一体どのような型でこのメソッドを利用するのか分かりません。分からないということはコードを生成できません。困りました。でも.netだとできています。実はgenericなメソッドやクラスは、Tが何であろうと同じコードで動いています。つまりTによってコードを生成することはありません。これは半分嘘です。Tが値型の場合はコードを生成しなければいけないこともありますが、そのへんの細かいことは今はいいです。話を進めます。型パラメータTに対して、Tが持つべき特徴を指定します。

interface class IFoo {
    Foo ^ foo();
};
generic<typename T>
    where T : IFoo
Foo ^ func(T ^ obj) {
    return obj->foo();
}

where節が登場しました。これはTがIFooを実装したクラスでなければならない、という制約です。ということは、この関数におけるTは必ずfooというメソッドを持っているはずです、これで、たとえ別のアセンブリに存在する型であっても、IFooを実装しさえすればこの関数を呼び出せます。何せ型に合わせた関数のコードを吐くのではなく、関数のコードを決め打ちにして、引数となる型の構造のほうを関数に合わせたのですから当然です。これでこのメソッド呼び出しは、一つのコードで実現できます。おめでとうございます。しかしこの例だけでは Foo ^ func(IFoo ^ obj); と比べてどう便利なのかという話です。何をおっしゃいますやら、私にも分かりません。ですが generic where T : INantoka List bar(Bar); という関数とかそういうのを考えればありがたみが分かると思います。ところが残念なことに、私は今とてもおなかがすいているので次にいきます。今煙に巻きました。
.netにはデリゲートという機能があります。Boost.Signals2相当です。ところがこれはCヰからだと使いにくいです。ちょっとここから例を拝借します。3番目のサンプルコードをC++/CLIで書いてみました。

/// <summary>
/// メッセージを表示するだけのデリゲート
/// </summary>
delegate void ShowMessage();

ref class Person
{
  System::String name;
public:
  Person(System::String name){this.name = name;}
  void ShowName(){Console.Write("名前: {0}\n", this.name);}
};

int main()
{
  Person ^ p = gcnew Person("鬼丸美輝");

  // インスタンスメソッドを代入。
  ShowMessage show = gcnew ShowMessage(p, &Person::ShowName);

  show();
}

できました。最後から2番目の文です、これが使い勝手の悪さの全てです。デリゲートを作るのに毎回C++で言うメンバ関数へのポインタを書くようなものです。激しく使い勝手が悪いです。これがC#(特に2.0以降)だとShowMessage show = p.ShowName; で余裕です。この差は大きいです。.netでGUIプログラミングをやろうとするとイベント登録/削除のためにデリゲートが頻出します。この差が10年分ほど積み重なれば間違いなくエベレスト登頂できます。それと、あまり関係ないですが、同じ理由でBoost.Bindの使い勝手も今一つだと思っているので、C++では主にPStade.Eggで作った関数オブジェクトを主体に扱いたいです。
忘れていました。そもそも組み込み型の一部を除いてC++の型とCヰの型には互換性がないので、以下のようなことは(単純には)できません。

struct Foo {
  int n;
  …
};
value struct Bar {};
ref struct Baz {
  int n;  // これはおーけー
  char * a;  // ポインタもおーけー
//Foo & foo;  // C++の参照をCヰの参照型(値型でも)のメンバとして使うことはできない!
  Foo * pfoo;  // ポインタでやりましょう!
//Foo foo;  // でも値では持てない!
  …
};
struct Qux {
//Bar bar;  // Cヰの値型オブジェクトも同じ!
//Baz ^ baz;  // CヰのハンドルをC++の型のメンバに持つことはできない!
  …
};

// 関数のローカルオブジェクトとしてなら両言語のオブジェクトを自由に作れますし、返せます
Foo f() {
  Foo foo;
  Baz baz1;
  Baz ^ baz2 = gcnew Baz();
  baz1.n = 42;
  foo.n = baz1.n;
  baz2->n = foo.n;
  return foo;
}
Baz ^ g() {
  return gcnew Baz();
}

組み込み算術型、ポインタ型はCヰでもそのまま書けますが、現実はそんなに甘くありません。それ以外のC++の型はCヰの型のフィールドにはできませんし、C++の型のメンバとしてCヰの値型/参照型を持つことはできないです。辛い現実ですが、受け入れなくてはなりません。ちなみに(ref/value)と(struct/class)で4パターンの組み合わせがありますが、そのへんはさっきの入門サイトを見てください。
あとまだ色々あるのですが、もう列挙するのも面倒なので勝手に岩永さんのところさっきのところとか見比べてC#でのある機能に対応するC++/CLIのそれがいかに面倒か調べてください。あなたがEnumeratorです。
そう、面倒、面倒です。ですが私は最初に書きました。「C++/CLIは、.netからC++やその他ネイティブコードのライブラリを楽に使えるようにするためと、そのための作業を楽に行うための言語です」と。あなた自分でいったこと忘れたのですか?って感じで頭おかしいですね。いいえちっともおかしくありません。確かに全てをCヰでやろうとすると面倒ですしC++の使い勝手を期待するとがっかりですしC#使いましょうになるのですが、それはその方針が間違っているからです。VC付属のライブラリや.netのクラスライブラリを使えばネイティブオブジェクトをCLIGCに管理させたり、ネイティブ側でもマネージオブジェクトへの参照を保持することができますし、それによってネイティブコード、マネージコードそれぞれでできることに制限が生じることもありません(コンパイルオプションがほげほげというのはありますが今は忘れましょう)。それになにより、最初のほうにさらりと書きましたが、C++のコードとCヰのコードは、混在させることができます。直前の関数の例がそうです。ここが重要です。一般に、ある言語から別の言語で作った機能を呼び出す場合、ここまでに述べてきた程度の面倒さでは済まない上に、型安全性の「か」の字どころか「安」の字の第一画すら含まない(.net系の言語間は別です、この記事の文脈からは、それらは全て同じ言語にしか見えません)ので、慎重に自分でそれを保証しなければなりません。ところがC++からはCヰをラッパとしてその背後にある.netクラスライブラリを、CヰからはC++あるいはその他のネイティブなライブラリを簡単に呼び出せます。まあ最近の.net系の言語の事情は知らないので、もしかしたら後者のメリットは無いかもしれないです。が、C++側から.netを使うにはこれ以上にない最高の選択です。だからC++/CLI(というかCヰ)を使う場合は、マネージとネイティブの仲介のためだけに使って、その他のほとんどのコードはC++や.net系言語で書いてください。これはお願いです。そしてこの言語のことを名前で呼んであげてください。君とか貴方じゃなくて、その言語の名前で呼んであげてください。そうすればこの言語あなたを背に乗せてマッハ3(後述のそれぞれの場所において)ぐらいで地を駆け、空を舞い、海を潜り、星光を殲滅するでしょう。背にのったあなたは最後に星の光と共に消滅します。でも許してあげてください、それは彼女なりの友情の証です。あなたはC++/CLIと友達になれたのです。