Compile-time evaluation lost in alias this

deadalnix deadalnix at gmail.com
Wed May 30 04:18:49 PDT 2012


Le 30/05/2012 10:58, Tommi a écrit :
> struct ValueImpl
> {
> static immutable(int) getValue()
> {
> return 42;
> }
> }
>
> struct ValueUser
> {
> ValueImpl m_valueImpl;
> alias m_valueImpl this;
> }
>
> void main(string[] args)
> {
> static assert(ValueImpl.getValue() == 42);
> static assert(ValueUser.getValue() == 42); // (1)
> }
>
> (1) Doesn't compile. Error: variable m_valueImpl cannot be read at
> compile time
>
> To use alias this for composition, it would be nice if the compile-time
> evaluable members of the aliased object would remain compile-time
> evaluable even when used through an alias. Is the current behavior
> defined by the language or is it due to the compiler (DMD) implementation?

m_valueImpl isn't static and ValueUser not instantiated. I wouldn't 
expect this to compile at all, CTFE or not.


More information about the Digitalmars-d mailing list