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.digitalmar...@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.

Reply via email to