On 10/6/17 5:08 PM, Alex wrote:
Hey, template gurus :)

given this:

struct M(alias I : S!E, alias S, E...)
{
     R!E r;
     this(S)(S initStruct)    // line 4
     {
         r = R!E(initStruct);
     }
}
struct R(E...)
{
     this(S)(S initStruct)    // line 12
     {
         // do some cool stuff
     }
}
void main()
{
     FS!(Etype1) fs;
     auto m = M!(typeof(fs))(fs);    // line 21.
     auto a = M!(fs); // does not work
     auto b = M(fs); // does not work
}
struct FS(T...){}
struct Etype1{}

Everything works as expected, especially line 21. The question is about syntactic sugar: What I have to change, to use auto deduction and to create the M struct like in line 22 or 23?

By the way, I'm aware, that the type matching in lines 4 and 12 is lost, in the way it is written here. However, it is meant to exist, if this helps in some way...

Thanks a lot in advance
Alex

What you need is IFTI or "Implicit Function Template Instantiation"

Note the "Function" part of it, in that it's only valid for functions.

So you need a factory function:

auto m(T)(T x)
{
  return M!(T)(x);
}

...

auto b = m(fs); // ok

There is an enhancement request to make constructors have the same mechanism. Not sure if or when it would be implemented.

-Steve

Reply via email to