Tengo algunos problemas para usar un argumento por defecto de tipo float:Parámetros por defecto de tipo float = galimatías
#include <wchar.h>
#include <iostream>
template<typename T>
void fun(T t = 1e-05);
template<typename T> inline
void fun(T t)
{
std::cout << t << std::endl;
}
int wmain(int argc, wchar_t* argv[])
{
fun<float>();
_getwch();
return 0;
}
Imprime -1.36867e-033 en lugar de la equivalencia de 1e-05. ¿Que esta pasando aqui?
Estoy usando VC++ 10.
EDIT1:
Gracias a todos por sus respuestas. Pero fundición del argumento predeterminado no funciona en los siguientes casos:
template<typename T>
void fun(T t = static_cast<T>(1e-05));
template<typename T> inline
void fun(T t)
{
std::wcout << t << std::endl;
}
int wmain(int argc, wchar_t* argv[])
{
fun<double>();
fun<float>();
_getwch();
return 0;
}
Así que este es sin duda un error y digno de mención?
Edit2:
Reported this issue to Microsoft
Está esperando que el compilador emita una conversión del doble al flotante. No es así Usar "1e-5f" lo arregla. Use connect.microsoft.com para informar esto. –
¿Quizás necesites 'wcout' en tu plataforma? –
@Hans: Sutil. Estaba a punto de sugerir 'diversión (T t = T (1e-05))' pero pensé que eso no sería necesario ... Por cierto, funciona bien en GCC 4.6. –