Thread overview | ||||||
---|---|---|---|---|---|---|
|
December 17, 2013 Compile time checks and alias this | ||||
---|---|---|---|---|
| ||||
I have something like this: enum isValid(T) = is(T == MyClass1); class MyClass1 {} class MyContainer(T) { T value; alias value this; } void main() { assert(isValid!MyClass1, "MyClass1 isn't valid"); assert(isValid!(MyContainer!MyClass1), "MyContainer!MyClass1 isn't valid"); } second assert conditions is false. But in normal code MyContainer!Myclass1 is casted automagically to MyClass1 and works almost as MyClass1. Is there a way to check this at compile time? |
December 17, 2013 Re: Compile time checks and alias this | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | On Tuesday, 17 December 2013 at 16:50:18 UTC, Andrea Fontana wrote:
> I have something like this:
>
> enum isValid(T) = is(T == MyClass1);
>
> class MyClass1 {}
>
> class MyContainer(T)
> {
> T value;
> alias value this;
> }
>
> void main()
> {
> assert(isValid!MyClass1, "MyClass1 isn't valid");
> assert(isValid!(MyContainer!MyClass1), "MyContainer!MyClass1 isn't valid");
> }
>
> second assert conditions is false. But in normal code MyContainer!Myclass1 is casted automagically to MyClass1 and
> works almost as MyClass1.
>
> Is there a way to check this at compile time?
is(T : MyClass1)
|
December 17, 2013 Re: Compile time checks and alias this | ||||
---|---|---|---|---|
| ||||
Posted in reply to anonymous | On Tuesday, 17 December 2013 at 17:19:26 UTC, anonymous wrote: > On Tuesday, 17 December 2013 at 16:50:18 UTC, Andrea Fontana wrote: >> I have something like this: >> >> enum isValid(T) = is(T == MyClass1); >> >> class MyClass1 {} >> >> class MyContainer(T) >> { >> T value; >> alias value this; >> } >> >> void main() >> { >> assert(isValid!MyClass1, "MyClass1 isn't valid"); >> assert(isValid!(MyContainer!MyClass1), "MyContainer!MyClass1 isn't valid"); >> } >> >> second assert conditions is false. But in normal code MyContainer!Myclass1 is casted automagically to MyClass1 and >> works almost as MyClass1. Hey didn't this mean "is derived from"? :) >> >> Is there a way to check this at compile time? > > is(T : MyClass1) |
December 17, 2013 Re: Compile time checks and alias this | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | On Tuesday, 17 December 2013 at 21:28:12 UTC, Andrea Fontana wrote:
> Hey didn't this mean "is derived from"? :)
>>>
>>> Is there a way to check this at compile time?
>>
>> is(T : MyClass1)
It actually means "is implicitly convertable to", which "is derived from" satisfies.
|
Copyright © 1999-2021 by the D Language Foundation