template implements(T, I)
static foreach(m; __traits(allMembers, I))
is(typeof(__traits(getMember, T, m)) == typeof(__traits(getMember, I, m))),
"`" ~ T.stringof ~ "` does not implement `" ~ I.stringof ~ "."
~__traits(identifier, __traits(getMember, I, m)) ~ "`");
int send(ubyte[] data, int len);
int recv(ubyte[] buff, int len);
int send(ubyte[] data, int len) { writeln("TcpSocket send"); return len; }
int recv(ubyte[] buff, int len) { writeln("TcpSocket recv"); return len; }
int send(ubyte[] data, int len) { writeln("UdpSocket send"); return len; }
int recv(ubyte[] buff, int len) { writeln("UdpSocket recv"); return len; }
int send(ubyte[] data, int len) { writeln("UnixSocket send"); return len; }
int recv(ubyte[] buff, int len) { writeln("UnixSocket recv"); return len; }
void Use(T)(T socket) if (implements!(T, ISocket))