On 9/7/16 3:19 AM, Andrea Fontana wrote:
On Tuesday, 6 September 2016 at 14:21:26 UTC, Steven Schveighoffer wrote:
On 9/5/16 5:59 AM, Andrea Fontana wrote:
I asked this some time (years?) ago. Time for a second try :)

Consider this:

---

T simple(T)() { return T.init; }


void main()
{
    int test = simple!int(); // it compiles
    int test2 = simple();    // it doesn't

      auto test3 = simple!int();

Granted, you are still typing "auto", but only specify the type once.

-Steve

Only for the simple case.

It would interesting if it would work for:

struct Blah
{
   string name;
}

Blah b;
b.name = simple();


or:

void myFunc(string s) { ... }
myFunc(simple());

Right, but there is a problem here. The connection of the simple return type to the simple template parameter is not necessarily guaranteed. That is, there is no guarantee simple!int is going to return int (for any template).

This means the compiler has to determine how to make simple return an int, and this isn't always obvious, or easy to determine.

You can, of course, rewrite simple to take advantage of IFTI:

void simple(T)(ref T setThis) { setThis = T.init; }

simple(b.name);

I'd call it initialize, and do it this way:

b.name.initialize();

-Steve

Reply via email to