10周年のSPコンテンツ!
17
@yutopp
decltype( hoge, fuga )みたいな書き方ってどういう事なんだろう
@kikairoya
@yutopp fugaの型を取ると同時に式hogeがvalidであることを確かめている?
@decimalbloat
@yutopp decltype(operator,(hoge, fuga))もしくはdecltype(hoge.operator,(fuga))か、カンマがオーバーロードされていない場合はdecltype(fuga)と同じです。
でちまるさん(実際かわいい) @decimalbloat
あー、不親切だなこの説明。 @kikairoya さんの言う通りなのですが、ちゃんとhogeがvalidな式であるか確かめつつfugaの型をとりたい場合はdecltype(static_cast<void>(hoge), fuga)とかしないといけないですね。
対鉱物用武装 @kikairoya
ああそうかvoidにキャストしないとダメか。でもoperator void()があったら(ry
対鉱物用武装 @kikairoya
オペランドがvoidでもいいって考えるとoperator ,って異質だなあ
でちまるさん(実際かわいい) @decimalbloat
@kikairoya あれ?第一オペランドをvoidとするoperator,をオーバーロードできましたっけ?
対鉱物用武装 @kikairoya
@decimalbloat オーバーロードは無理かなー。組み込み演算子の話。
でちまるさん(実際かわいい) @decimalbloat
@kikairoya であれば、hogeだけvoidにキャストしておけば、どのオーバーロードされたカンマ演算子も使われないので、(static_cast<void>(hoge), fuga)の型はfugaの型と同じになりますよね。
対鉱物用武装 @kikairoya
@decimalbloat うん、そんなことができるのが異質だなーと。ほかの演算子は(条件演算子の第2・第3オペランドを除いて)voidを取れないから。
対鉱物用武装 @kikairoya
しかし偏執的に考えるとoperator void()の存在があるから、該当するoperator ,()が無くても、(hoge, fuga)と(static_cast<void>(hoge), fuga)は同じではないことがある
対鉱物用武装 @kikairoya
いやまあoperator void()とか誰得だけど
std::めるぽん @melponn
operator void() にキャストする際に何か適当に副作用入れておけばいいのか・・・
対鉱物用武装 @kikairoya
あれ、decltypeのオペランドでもテンプレートの実体化起こるよね?
対鉱物用武装 @kikairoya
ああいや起こらなくてもprivateとかになってるとアレか。 # それこそ誰得
std::めるぽん @melponn
しかし decltype の中だと意味が無いのであった
でちまるさん(実際かわいい) @decimalbloat
@kikairoya decltype(hoge, fuga)やそこに static_cast入れたとしても、decltypeで調べたいことには何ら影響ないかと。
対鉱物用武装 @kikairoya
んー、偏執狂対策するには複文式無いと無理な気がしてきた
対鉱物用武装 @kikairoya
@decimalbloat private: operator void() const; という可能性は関係ない?
std::めるぽん @melponn
private: operator void() とかかっこよすぎる・・・
std::めるぽん @melponn
http://ideone.com/fpcFW private にするとちゃんとエラーになた・・・
でちまるさん(実際かわいい) @decimalbloat
hogeがvalidな式であることを調べつつfugaの型を取得するのが目的なら、operator voidがprivateで宣言されていない限りは大丈夫…
残りを読む(39)

コメント

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