how to propagate computed type during CTFE?

rikki cattermole rikki at cattermole.co.nz
Fri Feb 23 02:57:45 UTC 2018


On 23/02/2018 1:54 PM, Timothee Cour wrote:
> in example below, how do I propagate RET (or even `typeof(a)`) to the
> result value of `inferType`?
> 
> does this need a language change to allow this?
> 
> 
> ```
> template inference(alias emitter) {
>    auto inference(){
>      auto inferType(){
>        emitter!((a){
>          enum RET=typeof(a).stringof; // type is known here, how to propagate?
>          pragma(msg, RET);  // string
>          }) ();
>        return "unknown";
>      }
>      // how to get RET? (or even typeof(a) )
>      enum temp=inferType;
>      pragma(msg, temp);
>    }
> }
> 
> void main(){
>    static void fun(alias put)(){
>      put("hello");
>    }
>    inference!fun;
> }
> ```
> 
> use case: allow type inference in `emit`
> 
> https://github.com/timotheecour/dtools/blob/master/dtools/util/emit.d
> (see forum discussion here:
> https://forum.dlang.org/post/mailman.538.1458560190.26339.digitalmars-d@puremagic.com)> 

Yeah I've tried, I can't think of any way to do this.



More information about the Digitalmars-d mailing list