【新機能】作り忘れたまとめはありませんか?31日前まで期間指定してまとめが作れる高度な検索ができました。有料APIだからツイートの漏れはありません!

private: operator void() const;

オペレータオーバーロード怖い、というお話。
decltype C++ C++0x
6086view 1コメント
17
ログインして広告を非表示にする
@yutopp 2010-07-30 22:46:27
decltype( hoge, fuga )みたいな書き方ってどういう事なんだろう
@kikairoya 2010-07-30 22:48:28
@yutopp fugaの型を取ると同時に式hogeがvalidであることを確かめている?
@decimalbloat 2010-07-30 22:49:02
@yutopp decltype(operator,(hoge, fuga))もしくはdecltype(hoge.operator,(fuga))か、カンマがオーバーロードされていない場合はdecltype(fuga)と同じです。
でちまるさん(実際かわいい) @decimalbloat 2010-07-30 22:54:15
あー、不親切だなこの説明。 @kikairoya さんの言う通りなのですが、ちゃんとhogeがvalidな式であるか確かめつつfugaの型をとりたい場合はdecltype(static_cast<void>(hoge), fuga)とかしないといけないですね。
対鉱物用武装 @kikairoya 2010-07-30 22:56:00
ああそうかvoidにキャストしないとダメか。でもoperator void()があったら(ry
対鉱物用武装 @kikairoya 2010-07-30 22:58:49
オペランドがvoidでもいいって考えるとoperator ,って異質だなあ
でちまるさん(実際かわいい) @decimalbloat 2010-07-30 23:01:58
@kikairoya あれ?第一オペランドをvoidとするoperator,をオーバーロードできましたっけ?
対鉱物用武装 @kikairoya 2010-07-30 23:02:34
@decimalbloat オーバーロードは無理かなー。組み込み演算子の話。
でちまるさん(実際かわいい) @decimalbloat 2010-07-30 23:05:13
@kikairoya であれば、hogeだけvoidにキャストしておけば、どのオーバーロードされたカンマ演算子も使われないので、(static_cast<void>(hoge), fuga)の型はfugaの型と同じになりますよね。
対鉱物用武装 @kikairoya 2010-07-30 23:06:23
@decimalbloat うん、そんなことができるのが異質だなーと。ほかの演算子は(条件演算子の第2・第3オペランドを除いて)voidを取れないから。
対鉱物用武装 @kikairoya 2010-07-30 23:08:44
しかし偏執的に考えるとoperator void()の存在があるから、該当するoperator ,()が無くても、(hoge, fuga)と(static_cast<void>(hoge), fuga)は同じではないことがある
対鉱物用武装 @kikairoya 2010-07-30 23:09:10
いやまあoperator void()とか誰得だけど
RSS なめるぽん.atom @melponn 2010-07-30 23:12:06
operator void() にキャストする際に何か適当に副作用入れておけばいいのか・・・
対鉱物用武装 @kikairoya 2010-07-30 23:14:12
あれ、decltypeのオペランドでもテンプレートの実体化起こるよね?
対鉱物用武装 @kikairoya 2010-07-30 23:14:38
ああいや起こらなくてもprivateとかになってるとアレか。 # それこそ誰得
RSS なめるぽん.atom @melponn 2010-07-30 23:16:27
しかし decltype の中だと意味が無いのであった
でちまるさん(実際かわいい) @decimalbloat 2010-07-30 23:16:46
@kikairoya decltype(hoge, fuga)やそこに static_cast入れたとしても、decltypeで調べたいことには何ら影響ないかと。
対鉱物用武装 @kikairoya 2010-07-30 23:16:47
んー、偏執狂対策するには複文式無いと無理な気がしてきた
対鉱物用武装 @kikairoya 2010-07-30 23:17:52
@decimalbloat private: operator void() const; という可能性は関係ない?
RSS なめるぽん.atom @melponn 2010-07-30 23:17:58
private: operator void() とかかっこよすぎる・・・
RSS なめるぽん.atom @melponn 2010-07-30 23:18:45
http://ideone.com/fpcFW private にするとちゃんとエラーになた・・・
でちまるさん(実際かわいい) @decimalbloat 2010-07-30 23:19:04
hogeがvalidな式であることを調べつつfugaの型を取得するのが目的なら、operator voidがprivateで宣言されていない限りは大丈夫…
残りを読む(39)
フォロワー限定公開ならプライベートで楽しめる。 鍵アカのツイもまとめられるよ。

ブックマークしたタグ

あなたの好きなタグをブックマークしておこう!話題のまとめを見逃さなくなります。

コメント

Egtra (ysk-noh) @egtra 2010-07-31 21:51:36
ふと思った、operator void() = delete;している場合もまずい気がする。
ログインして広告を非表示にする
ログインして広告を非表示にする