Testing implicit conversion to template instance with is() expression

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Mar 15 09:44:13 PDT 2015


On 03/15/2015 08:47 AM, "Marc =?UTF-8?B?U2Now7x0eiI=?= 
<schuetzm at gmx.net>" wrote:

 > Should this work?
 >
 >      struct V(string s) {
 >      }
 >
 >      struct S(int U) {
 >          V!"xyz" x;
 >          alias x this;
 >      }
 >
 >      void main() {
 >          S!10 a;
 >          static assert(is(a : V!Args, Args...));
 >      }
 >
 > With DMD Git master, the static assert() fails. Should it? Am I doing
 > something wrong? How can I test whether something is implicitly
 > convertible to any instance of a particular template?

There is no way other than checking for compile-time duck typing (see 
the implementations of isInputRange and others).

One reason is that the compiler does not have the concept of "an 
instance of a template". Templates are for code generation and only the 
end-result (i.e. S!10) lives as a concept when compiling.

Ali



More information about the Digitalmars-d-learn mailing list