d应仅可映射引用
void main()
{
struct One
{
int entry = 1;
@disable this(this);
}
One[] ones = [One(), One()];
import std.algorithm.iteration: map;
import std.algorithm.comparison: equal;
assert(ones.map!`a.entry + 1`.equal([2, 2]));
}
不工作.
isInputRange!(One[])为假.
问题不是λ的参数,而是它的返回值.
本质上,当按ref返回r.front时,希望λ按ref返回,这样它就不会创建不必要的副本.对普通函数,方法是使用auto ref,但λ语法不支持此(问题21243),因此必须先解决该问题,或找到解决方法.可用串插件:
private enum getFrontLambda = q{(return ref R r) => r.front};
enum bool isInputRange(R) =
/* ... */
&& (
is(typeof(mixin("ref ", getFrontLambda)))
|| is(typeof(mixin(getFrontLambda)))
)
/* ... */
在用户代码中,复制了推导ref的逻辑:试用ref编译,如果失败则回退到非ref.
21243问题
浙公网安备 33010602011771号