Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
July 15, 2015 Casting random type to random struct - is this a bug? | ||||
---|---|---|---|---|
| ||||
struct S { int a, b; } auto s = cast(S)10; //compiles and sets s.a to 10. It works also for any other type, if the structure contains a member of that type in the first position. Is this normal behaviour? |
July 15, 2015 Re: Casting random type to random struct - is this a bug? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rumbu | On 7/15/15 11:45 AM, rumbu wrote:
> struct S { int a, b; }
> auto s = cast(S)10;
> //compiles and sets s.a to 10.
>
> It works also for any other type, if the structure contains a member of
> that type in the first position.
>
> Is this normal behaviour?
I would say this is a bug. As far as I know, it's not defined in the spec.
-Steve
|
July 15, 2015 Re: Casting random type to random struct - is this a bug? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rumbu |
On Wed, 15 Jul 2015 15:45:43 +0000
"rumbu" <rumbu@rumbu.ro> wrote:
> struct S { int a, b; }
> auto s = cast(S)10;
> //compiles and sets s.a to 10.
>
> It works also for any other type, if the structure contains a member of that type in the first position.
>
> Is this normal behaviour?
Yes, this is OK
If you need to cast against diferent types you can try pointers:
import std.stdio;
struct S
{
ubyte a;
ubyte b;
}
void main() {
ushort m = 65535;
auto s = *(cast(S*)&m);
writeln(s);
}
|
July 15, 2015 Re: Casting random type to random struct - is this a bug? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer |
On Wed, 15 Jul 2015 11:57:01 -0400
Steven Schveighoffer <schveiguy@yahoo.com> wrote:
> On 7/15/15 11:45 AM, rumbu wrote:
> > struct S { int a, b; }
> > auto s = cast(S)10;
> > //compiles and sets s.a to 10.
> >
> > It works also for any other type, if the structure contains a member of that type in the first position.
> >
> > Is this normal behaviour?
>
> I would say this is a bug. As far as I know, it's not defined in the spec.
>
> -Steve
It is defined:
Casting a value v to a struct S, when value is not a struct of the same type, is equivalent to:
S(v)
|
July 16, 2015 Re: Casting random type to random struct - is this a bug? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Kozák | On Wednesday, 15 July 2015 at 15:58:17 UTC, Daniel Kozák wrote:
>
> On Wed, 15 Jul 2015 15:45:43 +0000
> "rumbu" <rumbu@rumbu.ro> wrote:
>
>> struct S { int a, b; }
>> auto s = cast(S)10;
>> //compiles and sets s.a to 10.
>>
>> It works also for any other type, if the structure contains a member of that type in the first position.
>>
>> Is this normal behaviour?
>
> Yes, this is OK
>
> If you need to cast against diferent types you can try pointers:
>
In fact I'm trying to overload the cast operator in this case, I was surprised about the default casting since I didn't find any reference to this behaviour, nor in TDPL, nor online.
Since UFCS is not allowed in operator overloading I wonder if this is possible.
|
Copyright © 1999-2021 by the D Language Foundation