shouldn't this ctor be declared as explicit?