Vamos raciocinar por analogia. Se você definir uma função
void doSomething(A [137]) {
}
então C ++ trata como se você tivesse realmente escrito
void doSomething(A *) {
}
Em outras palavras, existem alguns tipos em que, se você os usar como parâmetro para uma função, o C ++ os substituirá automaticamente por um tipo diferente, o tipo que você obteria ao decair o tipo.
No seu caso, A()é o tipo de função que não recebe argumentos e retorna um A. Se você tiver uma função C ++ que aceita an A()como argumento, o C ++ fará com que a função aceite como entrada an A (*)(), um ponteiro para uma função que não aceita argumentos e retorna um A. A razão para isso é que você não pode ter um objeto do tipo A()em C ++, embora possa ter um ponteiro para um A().
A()eraAo construtor?