Usted puede simplemente crear dos constructores diferentes:
T(const T&)
T(const T&,double)
Sin embargo, lo que tienes es permitido como un constructor de copia.
En una nota lateral, he descubierto que generalmente no es una buena idea usar parámetros predeterminados en C++, y en cambio es mucho mejor usar sobrecargas, donde los que tienen menos parámetros invocan a los que tienen más parámetros, utilizando valores predeterminados (por supuesto que no es posible con constructores en ISO C++ 2003, pero los constructores de delegación están permitidos en ISO C++ 201x). La razón para esto es que los valores predeterminados le dan a sus funciones diferentes firmas reales que su comportamiento aparente, por lo que es algo difícil/doloroso al tomar los punteros a las funciones. Al proporcionar sobrecargas, se pueden tomar punteros de función de cada tipo de invocación posible sin requerir ningún tipo de mecanismo "vinculante" para hacerlo funcionar.
Ver [este PR] (http://llvm.org/bugs/show_bug.cgi?id=5989) envié un clang hace algún tiempo para que algunos juegos jugaran con eso. –
http://punchlet.wordpress.com/2009/12/03/letter-the-third/ –