Existe alguma diferença entre `List x;` e `List x ()`

O título vem do famoso sitePerguntas frequentes sobre C ++ por Marshall Cline.

O autor afirma que há uma diferença entre os dois exemplos de código a seguir.

Suponha que List seja o nome de alguma classe. Então a função f () declara um objeto List local chamado x:

void f()
{
    List x;     // Local object named x (of class List)
    ...
}

Mas a função g () declara uma função chamada x () que retorna uma lista:

void g()
{
    List x();   // Function named x (that returns a List)
    ...
}

Mas é realmente errado usar a segunda variante?

E se realmente é uma declaração, o compilador não reclamaria que você não pode declarar uma função dentro de uma função?

questionAnswers(1)

yourAnswerToTheQuestion