Re: How to get value of type at CT given only an alias

2017-07-14 Thread Moritz Maxeiner via Digitalmars-d-learn
On Friday, 14 July 2017 at 18:06:49 UTC, Steven Schveighoffer 
wrote:


.init is the default value.

I'm not sure you can get the default value of a non-default 
initializer, My attempts using init didn't work. e.g.:


void foo(alias T)()
{
   pragma(msg, T.init);
}

struct S
{
   int y = 5;
   void bar() { foo!y; } // prints 0
}


See spec [1]:

"If applied to a variable or field, it is the default initializer 
for that variable or field's type."


If you want to get at the 5 in a static context, you'd have to use

---
S.init.y
---

i.e. get the default initializer for the struct and get its y 
member's value.


[1] https://dlang.org/spec/property.html#init




Re: How to get value of type at CT given only an alias

2017-07-14 Thread Steven Schveighoffer via Digitalmars-d-learn

On 7/14/17 1:51 PM, FoxyBrown wrote:
Trying to do some tricky stuff but I can't seem to get the value of a 
type(enum in my case, but must work in general).


Basically, given a type T or an alias T(alias preferred), I'd like to be 
able to get the "default value" of that type.


e.g.,

if it is an enum and I have an alias to a member, instead of (Enum)3 I 
want 3.


if it is a member field, I want the default value.

if it is a function pointer, the address(probably 0, but whatever).

Basically a sort of generic "getValue" that attempts to get the CT value 
of any type, if it exists. (obviously the value of class is meaningless, 
so returns ""... class isn't even a type, but can still query).


In fact, I'd like to also naturally resolve the value back in to the 
expression that created it.


e.g.,

(Enum)3 -> Enum.ThirdEntry




.init is the default value.

I'm not sure you can get the default value of a non-default initializer, 
My attempts using init didn't work. e.g.:


void foo(alias T)()
{
   pragma(msg, T.init);
}

struct S
{
   int y = 5;
   void bar() { foo!y; } // prints 0
}

-Steve


How to get value of type at CT given only an alias

2017-07-14 Thread FoxyBrown via Digitalmars-d-learn
Trying to do some tricky stuff but I can't seem to get the value 
of a type(enum in my case, but must work in general).


Basically, given a type T or an alias T(alias preferred), I'd 
like to be able to get the "default value" of that type.


e.g.,

if it is an enum and I have an alias to a member, instead of 
(Enum)3 I want 3.


if it is a member field, I want the default value.

if it is a function pointer, the address(probably 0, but 
whatever).


Basically a sort of generic "getValue" that attempts to get the 
CT value of any type, if it exists. (obviously the value of class 
is meaningless, so returns ""... class isn't even a type, but can 
still query).


In fact, I'd like to also naturally resolve the value back in to 
the expression that created it.


e.g.,

(Enum)3 -> Enum.ThirdEntry