private: operator void() const;

オペレータオーバーロード怖い、というお話。
17
@yutopp

decltype( hoge, fuga )みたいな書き方ってどういう事なんだろう

2010-07-30 22:46:27
@kikairoya

@yutopp fugaの型を取ると同時に式hogeがvalidであることを確かめている?

2010-07-30 22:48:28
@decimalbloat

@yutopp decltype(operator,(hoge, fuga))もしくはdecltype(hoge.operator,(fuga))か、カンマがオーバーロードされていない場合はdecltype(fuga)と同じです。

2010-07-30 22:49:02
でちまるさん(実際かわいい) @decimalbloat

あー、不親切だなこの説明。 @kikairoya さんの言う通りなのですが、ちゃんとhogeがvalidな式であるか確かめつつfugaの型をとりたい場合はdecltype(static_cast<void>(hoge), fuga)とかしないといけないですね。

2010-07-30 22:54:15
若年寄(もう若くない) @kikairoya

ああそうかvoidにキャストしないとダメか。でもoperator void()があったら(ry

2010-07-30 22:56:00
若年寄(もう若くない) @kikairoya

オペランドがvoidでもいいって考えるとoperator ,って異質だなあ

2010-07-30 22:58:49
でちまるさん(実際かわいい) @decimalbloat

@kikairoya あれ?第一オペランドをvoidとするoperator,をオーバーロードできましたっけ?

2010-07-30 23:01:58
若年寄(もう若くない) @kikairoya

@decimalbloat オーバーロードは無理かなー。組み込み演算子の話。

2010-07-30 23:02:34
でちまるさん(実際かわいい) @decimalbloat

@kikairoya であれば、hogeだけvoidにキャストしておけば、どのオーバーロードされたカンマ演算子も使われないので、(static_cast<void>(hoge), fuga)の型はfugaの型と同じになりますよね。

2010-07-30 23:05:13
若年寄(もう若くない) @kikairoya

@decimalbloat うん、そんなことができるのが異質だなーと。ほかの演算子は(条件演算子の第2・第3オペランドを除いて)voidを取れないから。

2010-07-30 23:06:23
若年寄(もう若くない) @kikairoya

しかし偏執的に考えるとoperator void()の存在があるから、該当するoperator ,()が無くても、(hoge, fuga)と(static_cast<void>(hoge), fuga)は同じではないことがある

2010-07-30 23:08:44
若年寄(もう若くない) @kikairoya

いやまあoperator void()とか誰得だけど

2010-07-30 23:09:10
めるぽん.c @melponn

operator void() にキャストする際に何か適当に副作用入れておけばいいのか・・・

2010-07-30 23:12:06
若年寄(もう若くない) @kikairoya

あれ、decltypeのオペランドでもテンプレートの実体化起こるよね?

2010-07-30 23:14:12
若年寄(もう若くない) @kikairoya

ああいや起こらなくてもprivateとかになってるとアレか。 # それこそ誰得

2010-07-30 23:14:38
めるぽん.c @melponn

しかし decltype の中だと意味が無いのであった

2010-07-30 23:16:27
でちまるさん(実際かわいい) @decimalbloat

@kikairoya decltype(hoge, fuga)やそこに static_cast入れたとしても、decltypeで調べたいことには何ら影響ないかと。

2010-07-30 23:16:46
若年寄(もう若くない) @kikairoya

んー、偏執狂対策するには複文式無いと無理な気がしてきた

2010-07-30 23:16:47
若年寄(もう若くない) @kikairoya

@decimalbloat private: operator void() const; という可能性は関係ない?

2010-07-30 23:17:52
めるぽん.c @melponn

private: operator void() とかかっこよすぎる・・・

2010-07-30 23:17:58
めるぽん.c @melponn

http://ideone.com/fpcFW private にするとちゃんとエラーになた・・・

2010-07-30 23:18:45
でちまるさん(実際かわいい) @decimalbloat

hogeがvalidな式であることを調べつつfugaの型を取得するのが目的なら、operator voidがprivateで宣言されていない限りは大丈夫…

2010-07-30 23:19:04