avoided ctor arguments with the same name as correspondent members, as some compilers seem to choke on X::X(T t):t(t)