Most vexing parse
A regra do C++ segundo a qual tudo que puder ser interpretado como declaração de função será interpretado como declaração de função, mesmo quando você claramente queria uma variável.
Escreva Widget w(); achando que criou um objeto e, na verdade, você declarou uma função sem argumentos que retorna um Widget. Piora com Timer t(Clock());, que declara uma função cujo parâmetro é um ponteiro para função que retorna um Clock. A gramática exige, e o compilador obedece. O pior é que o erro não aparece na declaração, e sim onde a variável é usada, com uma mensagem sobre a expressão precisar ter tipo de classe, bem longe da causa. Scott Meyers batizou o fenômeno em Effective STL. Desde o C++11, a correção é a inicialização com chaves: Widget w{}; não é ambíguo, o que é o argumento prático mais forte a favor dessa sintaxe.