On 5/19/15 2:40 PM, Marco Leise wrote:
I was wondering why T.init is treated as a manifest constant.
Don't all .init's end up in some data segment with a
resolvable address ?
Because T.init IS a manifest constant. In other words, doing:
T t = T.init;
Generates code to initialize t. It doesn't copy the data from some init
value stored in ROM.
Note, there is a place T.init is stored, and that is in typeid(T).init.
However, it's not always there (could be null if T.init is all zero).
What we could do, however, is make one copy of an addressable T.init:
template initialValue(T)
{
static immutable T initialValue = T.init;
}
that was used wherever it's needed, instead of creating a new one for
every time you need it.
Likewise it would be nice to get the a class's .init[] slice
at compile-time.
I think you can:
typeid(SomeClass).init
-Steve