opAssign and references
Nicolas Silva
nical.silva at gmail.com
Tue Jan 31 09:15:57 PST 2012
Hi,
> Works for me. Which version of the compiler are you using?
Sorry, i forgot to mention: i'm using dmd 2.057 on ubuntu 32bit.
On Tue, Jan 31, 2012 at 5:31 PM, Timon Gehr <timon.gehr at gmx.ch> wrote:
> On 01/31/2012 03:03 PM, Nicolas Silva wrote:
>>
>> Hi,
>>
>> I'm playing with variants and I noticed that opAssign is not invoked
>> when an assignation is done on a reference.
>>
>> here is the test case:
>>
>> import std.variant;
>>
>> struct Foo
>> {
>> Variant a;
>> Variant b;
>> ref Variant refA()
>> {
>> return a;
>> }
>> }
>>
>> void main()
>> {
>> Foo f1;
>> f1.a = 42; // ok
>> f1.b = 23; // ok
>>
>> f1.refA() = 24; // Error: cannot implicitly convert expression
>> (24) of type int to VariantN!(maxSize)
>
>
> Works for me. Which version of the compiler are you using?
>
>
>
>> f1.refA().opAssign( 24 ); // ok, but not very nice...
>>
>> // slightly OT but
>> Foo f2 = { a: 10 }; // Error: cannot implicitly convert expression
>> (10) of type int to VariantN!(maxSize)
>
>
> This is http://d.puremagic.com/issues/show_bug.cgi?id=7019
>
>
>> }
>>
>>
>> Is it normal? Am I missing something?
>> I took Variant as an example because it does use opAssign but one
>> could create a struct defining opAssign with the same results.
>>
>> More generally, I feel like I don't really understand the semantic of
>> opAssign (or maybe references). I'd intuitively expect it to be
>> invoked when the "=" operator is used on a reference and I'd also
>> expect it to be invoked in struct initializers (though there might be
>> something about compiletime / runtime stories in this particular
>> case, yet i think one would expect it to just work).
>>
>> D aims at being simple and intuitive, and in this case it looks not so
>> intuitive to me.
>
>
> If something is not as simple and intuitive as it ought to be, there might
> be a compiler bug.
>
>>
>> Best regards,
>>
>> Nicolas Silva
>
>
More information about the Digitalmars-d-learn
mailing list