how to propagate computed type during CTFE?

Stefan Koch uplink.coder at googlemail.com
Fri Feb 23 11:32:40 UTC 2018


On Friday, 23 February 2018 at 00:54:34 UTC, 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)

Yes there is a language change required for this.
Currently types are untouchable entities.
I plan to introduce a mechanism which'll give you first-class 
types inside a bounded semantic construct.


More information about the Digitalmars-d mailing list