​原文​

struct U
{
auto ref func(int i)() { return this; }
}

void main()
{
{
alias type = typeof(U().func!0);
pragma(msg, type); // pure nothrow @nogc ref @safe U() return
//.1
pragma(msg, is(type : U)); // 假

auto u = U().func!0;
pragma(msg, typeof(u)); // U
}
{
alias type = typeof(U().func!0());
pragma(msg, type); // U
pragma(msg, is(type : U)); // 真

auto u = U().func!0();
pragma(msg, typeof(u)); // U
}
}

为何,​​typeof(U().func!0)!=U​​​.
如何​​​检查​​​返回的值是否具有​​U类型​​.

​.1​​​就是​​@property​​不同的地方,

@property auto ref func(int i)() { return this; }

现在,​​U().func!0​​​为式中​​调用​​​,但不推荐​​@property​​​.
​​​std.traits.ReturnType​​更明白.

import std.traits;
alias type = ReturnType!(U().func!0);

为何不直接:

alias type = typeof(U().func!0());