@yutopp decltype(operator,(hoge, fuga))もしくはdecltype(hoge.operator,(fuga))か、カンマがオーバーロードされていない場合はdecltype(fuga)と同じです。
2010-07-30 22:49:02あー、不親切だなこの説明。 @kikairoya さんの言う通りなのですが、ちゃんとhogeがvalidな式であるか確かめつつfugaの型をとりたい場合はdecltype(static_cast<void>(hoge), fuga)とかしないといけないですね。
2010-07-30 22:54:15@kikairoya あれ?第一オペランドをvoidとするoperator,をオーバーロードできましたっけ?
2010-07-30 23:01:58@kikairoya であれば、hogeだけvoidにキャストしておけば、どのオーバーロードされたカンマ演算子も使われないので、(static_cast<void>(hoge), fuga)の型はfugaの型と同じになりますよね。
2010-07-30 23:05:13@decimalbloat うん、そんなことができるのが異質だなーと。ほかの演算子は(条件演算子の第2・第3オペランドを除いて)voidを取れないから。
2010-07-30 23:06:23しかし偏執的に考えるとoperator void()の存在があるから、該当するoperator ,()が無くても、(hoge, fuga)と(static_cast<void>(hoge), fuga)は同じではないことがある
2010-07-30 23:08:44あれー何か話がーと思ったら、 http://twitter.com/decimalbloat/status/19911593592 これのreply先が間違っていた。 http://twitter.com/kikairoya/status/19911230046 こっちでした。
2010-07-30 23:09:32@kikairoya decltype(hoge, fuga)やそこに static_cast入れたとしても、decltypeで調べたいことには何ら影響ないかと。
2010-07-30 23:16:46@decimalbloat private: operator void() const; という可能性は関係ない?
2010-07-30 23:17:52hogeがvalidな式であることを調べつつfugaの型を取得するのが目的なら、operator voidがprivateで宣言されていない限りは大丈夫…
2010-07-30 23:19:04