Stefan 在研究类型函数.d作者在研究加速模板元编程及所有权/借贷关系.Steven 勾勒出std2设计
亚当的:

module typegame.solution;
string easy(T...)() {
    string result;//分开显示名与看见名,用于细分
    string lastDisplay;
    string lastSeen;
    int repetitionCount;
    void finish() {//完成
        if(repetitionCount != 2 && repetitionCount != 3)
            return;
        if(result.length)result ~= " ";
        if(repetitionCount == 2)
            result ~= "double ";
        else
            result ~= "triple ";

        result ~= lastDisplay;
    }//函数中带函数

    foreach(t; T) {//T
        if(t.mangleof == lastSeen) {
            repetitionCount++;
        } else {
            finish();
            lastSeen = t.mangleof;
            lastDisplay = t.stringof;
            repetitionCount = 1;
        }//就是个`流`序列处理.
    }
    finish();return result;
}

pragma(msg, easy!(int, int, uint, uint, uint));
pragma(msg, easy!(char, char, wchar, dchar, dchar));

stefan:

alias type = __type;
type[] makeTypeArray(type[] types ...){
    return types;
}//类型数组

import std.algorithm;
enum type[] types = makeTypeArray(int, uint, long, ulong);
enum size4 = types.filter!((type a) { return a.sizeof == 4; } );//过滤类型
pragma(msg, () {
    type[] result = [];
    foreach(t;size4)result ~= t;
    return result;
}().tupleof);
// 输出:tuple((int), (uint))

opAssign不是用于初化,而是为子序列赋值.
构造函数中的第1次赋值不变量,可当作赋值.第2次就不能改了.奇怪的是在未初化成员上调用方法,导致初化它.
λ有两种形式,普通函数仅一种,这是不一致.
应该让{}过时,而用(){}
重写

`=> ...;`为`{ return ...; }`

还得消除=> {return expr;}的歧义.

struct v
{
  static int foo;
}

1(v) => v.foo;,这是模板vfoo.
2auto x(v) => v.foo;,这是函数v参数foo.
(v) => _x + v;,无类型,表明这是模板.