Thread overview | |||||
---|---|---|---|---|---|
|
June 22, 2017 Cannot implicitly convert expression (struct this) | ||||
---|---|---|---|---|
| ||||
Hi,
I created a custom type which enables me to have enums which have in their initial state, the init value of their base type. Something similiar to Nullable...
enum Reason : string {CO = "Co", FU = "Fu", CA = "Ca"}
struct TestStruct {InitialEnum!Reason reason;}
This line raises the error:
TestStruct s2 = TestStruct(Reason.FU);
>> Error: cannot implicitly convert expression ("Fu") of type Reason to InitialEnum!(Reason)
While this line is working fine:
TestStruct s1 = {reason: Reason.FU};
What do I miss?
Kind regards
André
struct InitialEnum(T)
{
import std.traits: OriginalType, EnumMembers;
import std.conv: to;
private T _value;
private bool _isEmpty = true;
alias EnumBaseType = OriginalType!T;
@property EnumBaseType baseTypeValue() { return (_isEmpty) ? EnumBaseType.init : _value; }
@property T value() { return _value; }
@property bool isEmpty() { return _isEmpty; }
alias baseTypeValue this;
void opAssign(EnumBaseType value)
{
if (value == EnumBaseType.init)
{
_isEmpty = true;
return;
}
foreach (member; EnumMembers!T)
{
if (value == member)
{
_value = member;
_isEmpty = false;
return;
}
}
throw new Exception("Value "~value.to!string~" is not a valid enum value");
}
this(T t)
{
_isEmpty = false;
_value = t;
}
this(EnumBaseType value)
{
opAssign(value);
}
}
|
June 23, 2017 Re: Cannot implicitly convert expression (struct this) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Pany | On Thursday, 22 June 2017 at 09:57:44 UTC, Andre Pany wrote:
> This line raises the error:
> TestStruct s2 = TestStruct(Reason.FU);
>>> Error: cannot implicitly convert expression ("Fu") of type Reason to InitialEnum!(Reason)
>
> While this line is working fine:
> TestStruct s1 = {reason: Reason.FU};
I think these should be equivalent, report a bug.
|
July 05, 2017 Re: Cannot implicitly convert expression (struct this) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kagamin | On Friday, 23 June 2017 at 15:52:10 UTC, Kagamin wrote: > On Thursday, 22 June 2017 at 09:57:44 UTC, Andre Pany wrote: >> This line raises the error: >> TestStruct s2 = TestStruct(Reason.FU); >>>> Error: cannot implicitly convert expression ("Fu") of type Reason to InitialEnum!(Reason) >> >> While this line is working fine: >> TestStruct s1 = {reason: Reason.FU}; > > I think these should be equivalent, report a bug. Issue 17552 created: http://forum.dlang.org/post/mailman.3688.1498412595.31550.digitalmars-d-bugs@puremagic.com Kind regards André |
Copyright © 1999-2021 by the D Language Foundation