原文
最小示例:
void main()
{int i;static assert(isCallable!(() => i)); //分配static assert(is(typeof(() => i))); // 好
}template isCallable(T...)
{enum bool isCallable = true;
}
dmd -vcg-ast
输出:
import object;
void main()
{int i = 0;return 0;
}
enum bool isCallable(T...) = true;
isCallable!(delegate () => i)
{enum bool isCallable = true;
}
没有分配
闭包.你看到的只是用闭包
类型(因为可访问main
环境,这是正确
类型)实例化isCallable
.但是,查看反汇编
代码:
000000000004271c <_Dmain>:4271c: 55 push %rbp4271d: 48 8b ec mov %rsp,%rbp42720: 48 83 ec 10 sub $0x10,%rsp42724: 31 c0 xor %eax,%eax42726: 89 45 f8 mov %eax,-0x8(%rbp)42729: c9 leaveq 4272a: c3 retq
未分配
闭包,