Constructor overload resolution is not working right for the case in which the class name is used as the constructor name, and there is really a constructor operation (i.e., not a constructorless instantiation). The result is that improperly typed arguments are accepted, without causing a constraint violation.