Menu
Search
Thread overview
casting from variant
Aug 05, 2012
cal
Aug 05, 2012
Philippe Sigaud
Aug 05, 2012
cal
Aug 05, 2012
Philippe Sigaud
Aug 05, 2012
cal
```In the following code:

Variant j;
j = 1.0; // make it a double
auto x = cast(float)(j.get!(double)); // fail: cannot cast j.get!(double)
auto y = cast(float)x; // fine

The first attempt to cast doesn't compile, but the second less-direct cast is OK. Is that a bit strange?
```
```On Sun, Aug 5, 2012 at 5:40 AM, cal <callumenator@gmail.com> wrote:
> In the following code:
>
> Variant j;
> j = 1.0; // make it a double
> auto x = cast(float)(j.get!(double)); // fail: cannot cast j.get!(double)
> auto y = cast(float)x; // fine

I think it's a property-like problem: you need () after .get!()
I had this problem a few days ago.

Variant j;
j = 1.0; // make it a double
auto x = cast(float)(j.get!(double)()); // fine
auto y = cast(float)x; // fine
```
```On Sunday, 5 August 2012 at 06:31:37 UTC, Philippe Sigaud wrote:
> On Sun, Aug 5, 2012 at 5:40 AM, cal <callumenator@gmail.com> wrote:
>> In the following code:
>>
>> Variant j;
>> j = 1.0; // make it a double
>> auto x = cast(float)(j.get!(double)); // fail: cannot cast j.get!(double)
>> auto y = cast(float)x; // fine
>
> I think it's a property-like problem: you need () after .get!()
> I had this problem a few days ago.
>
>
> Variant j;
> j = 1.0; // make it a double
> auto x = cast(float)(j.get!(double)()); // fine
> auto y = cast(float)x; // fine

Ah thanks!, I didn't even think of that.

```
```On Sun, Aug 5, 2012 at 6:34 PM, cal <callumenator@gmail.com> wrote:

>> Variant j;
>> j = 1.0; // make it a double
>> auto x = cast(float)(j.get!(double)()); // fine
>>
>> auto y = cast(float)x; // fine
>
>
> Ah thanks!, I didn't even think of that.

Btw, std.variant.Variant also offers a `.coerce` method:

auto x = j.coerce!float; // fine

No need of parenthesis on this one.

See also `.convertsTo`

http://dlang.org/phobos/std_variant.html#convertsTo
```
```On Sunday, 5 August 2012 at 18:04:41 UTC, Philippe Sigaud wrote:
> On Sun, Aug 5, 2012 at 6:34 PM, cal <callumenator@gmail.com> wrote:
>
>>> Variant j;
>>> j = 1.0; // make it a double
>>> auto x = cast(float)(j.get!(double)()); // fine
>>>
>>> auto y = cast(float)x; // fine
>>
>>
>> Ah thanks!, I didn't even think of that.
>
> Btw, std.variant.Variant also offers a `.coerce` method:
>
> auto x = j.coerce!float; // fine
>
> No need of parenthesis on this one.
>
> See also `.convertsTo`
>
> http://dlang.org/phobos/std_variant.html#convertsTo

Even better :)
```