Cの代入

the type of the right
1
Üe🦀 @ranha

volatile struct S ← volatile const struct Sで代入成功するのなんでか教えて欲しいのですが…

2011-04-21 16:18:29
若年寄(もう若くない) @kikairoya

@ranha 代入のために右辺値を評価する時点でcvは消えるからじゃないの

2011-04-21 16:19:19
Üe🦀 @ranha

@kikairoya それISO/IEC 9899:1999だとどこに書いてますか

2011-04-21 16:22:23
若年寄(もう若くない) @kikairoya

@ranha どこと聞かれても困るけど、decayとかstandard type conversionとかそういう感じの定義があって、evaluateの時点で適用されるよって書いてあると思う

2011-04-21 16:23:42
若年寄(もう若くない) @kikairoya

@ranha 6.3.2.1-2 If the lvalue has qualified type, the value has the unqualified version of the type of the lvalue; ...

2011-04-21 16:31:04
若年寄(もう若くない) @kikairoya

@ranha 6.5.16.1-2 ... the value of right operand ... and the value stored in ...

2011-04-21 16:34:45
Üe🦀 @ranha

@kikairoya 6.5.16.1-2にもright operandがconvertされる的な事が書いてるので成る程。しかし6.5.16.1-1のConstraints 2つめの"the type of the right"というのはどの段階のrightなのでしょうかという…

2011-04-21 16:35:01
若年寄(もう若くない) @kikairoya

@ranha compatible with the type of the right の qualified or unqualified versionじゃないの

2011-04-21 16:37:15
Üe🦀 @ranha

@kikairoya 例えばconst volatile struct S sである時に、fuga = s;で、ソモソモthe type of the rightが分かって無いとqualifiedもunqualifiedもないと思うのですが

2011-04-21 16:41:03
Üe🦀 @ranha

semanticsでassign expressionの型に変換するとあるしthe type of the rightはそうなのかと思ったけど、assign expressionの型てleft operandの型のunqualifiedだからcompatibleも何も無いんじゃ

2011-04-21 16:48:28
若年寄(もう若くない) @kikairoya

@ranha unqualifiedと表現したらすべてのcvが消えるんだと思ったけど、qualified自体の定義が見当たらない

2011-04-21 16:52:27
Üe🦀 @ranha

@kikairoya それに"近い"ものが、6.2.5-25に書かれてると思っていて、そしてここ以外には無いとも思っています!

2011-04-21 16:53:40
Üe🦀 @ranha

qualified types, 6.2.5 , qualified version of type, 6.2.5ってIndexにも書いてるし多分大丈夫ですよね…

2011-04-21 16:54:47
若年寄(もう若くない) @kikairoya

@ranha p92脚注94 the conversion changes lvalues to "the value of the expression" and thus removes any type qualifiers

2011-04-21 16:59:35
Üe🦀 @ranha

@kikairoya 6.5.16-3を踏まえつつ6.5.16.1-2と注釈を更に踏まえて制約を読むと、本質としてvalue of the right operandがleft operandの修飾子消去した型にconvert出来ればOKて感じなんですかね

2011-04-21 17:11:36
Üe🦀 @ranha

value of the right operandは多分これも修飾子消去されてるから、つまりa = bでbの修飾子無視した型から修飾子無視したaの型へのconvertが定義されていれば、a=bもソレに従って定義されるって感じかな

2011-04-21 17:13:08
若年寄(もう若くない) @kikairoya

@ranha はい。assignment operatorが興味あるのは、leftのobject storageとrightのvalueだけで、valueは常にunqualifiedだから、unqualified type of leftも常にunqualifiedとなる、はず。

2011-04-21 17:13:51