Most vexing parse
La regola del C++ per cui tutto ciò che può essere interpretato come dichiarazione di funzione deve esserlo — anche quando era ovviamente una variabile ciò che si voleva.
Scrivendo Widget w(); convinti di aver creato un oggetto, in realtà si è dichiarata una funzione senza argomenti che restituisce un Widget. Va peggio con Timer t(Clock());, che dichiara una funzione il cui parametro è un puntatore a funzione che restituisce un Clock. La grammatica lo impone e il compilatore obbedisce diligentemente. La parte sgradevole è che l'errore compare non alla dichiarazione ma dove la variabile viene usata, formulato come un'osservazione sul fatto che l'espressione deve avere tipo classe — lontano dalla causa. Scott Meyers battezzò il fenomeno in Effective STL. Dal C++11 la soluzione è l'inizializzazione con le graffe: Widget w{}; è inequivocabile, ed è il più forte argomento pratico a favore di quella sintassi.