most-vexing-parse

Constructor predeterminado con corchetes vacíos

¿Hay alguna buena razón para que un conjunto vacío de corchetes redondos (paréntesis) no sea válido para llamar al construct ... ject(); // error Parece que escribo "()" automáticamente cada vez. ¿Hay una buena razón por la que esto no está permitido?

¿Por qué esto llama al constructor predeterminado?

struct X { X() { std::cout << "X()\n"; } X(int) { std::cout << "X(int)\n"; } }; const int answer = ... eterminado. PUNTOS DE BONIFICACIÓN: ¿Qué tendría que cambiar para obtener una declaración temporal en lugar de una variable?

¿Por qué C++ nos permite rodear el nombre de la variable entre paréntesis al declarar una variable?

Por ejemplo, una declaración como la siguiente: int (x) = 0; O incluso eso: int (((x))) = 0; Me topé con esto porque e ... l posibilidad porque por ahora veo que solo crea el caso similar a la notoria "análisis más irritante" y ¿no añade nada útil?

Comportamiento extraño del compilador de Visual Studio C++

Solo tengo curiosidad por saber por qué este pequeño fragmento de código se compila correctamente (y sin advertencias) en Vi ... e no puedo probarlos ahora. struct T { int t; T() : t(0) {} }; int main() { T(i_do_not_exist); return 0; }

Análisis más molesto

Obtuve el código de aquí. class Timer { public: Timer(); }; class TimeKeeper { public: TimeKeeper(const Timer& t ... tá presente. Por qué importaría esta línea, el compilador detectaría ambigüedad en la construcción de time_keeper(Timer() ).