De forma predeterminada, en C++, se puede usar un constructor de argumento único como operador de conversión implícito. Esto se puede suprimir marcando el constructor como explícito.¿Forzar a los constructores de argumento único a ser explícitos en C++?
Prefiero hacer que "explícito" sea el valor predeterminado, de modo que el compilador no pueda usar silenciosamente estos constructores para la conversión.
¿Hay alguna manera de hacer esto en el estándar C++? En su defecto, ¿hay algún pragma (o similar) que funcione en Microsoft C++ para hacer esto? ¿Qué pasa con g ++ (no lo usamos, pero podría ser información útil)?
Para ser sincero, no nos preocupa demasiado la portabilidad; somos una tienda de Windows Eso no implica que no nos importe; significa que, una vez que haya optado por el marco de la GUI de Win32, el soporte de Linux o OSX es académico. –
La portabilidad no es solo un problema de plataforma. Hay otros compiladores disponibles para Windows, ej. Intel, MinGW. También hay compatibilidad con versiones anteriores en las nuevas versiones del compilador de Microsofts. La única garantía que tiene es que el Comité C++ piensa cuidadosamente antes de romper el código C++ existente. –
Solo para aclarar, no estoy sugiriendo que Microsoft rompa el código de la gente sin pensar, sin embargo, tienen presiones diferentes a las del comité de la norma. –