Razonemos por analogía. Si define una función
void doSomething(A [137]) {
}
entonces C ++ lo trata como si realmente hubieras escrito
void doSomething(A *) {
}
En otras palabras, hay algunos tipos donde, si los usa como parámetro de una función, C ++ los reemplazará automáticamente con un tipo diferente, el tipo que obtendría al descomponer el tipo.
En su caso, A()es el tipo de función que no toma argumentos y devuelve un A. Si tiene una función C ++ que toma un A()como argumento, C ++ tendrá la función tomar como entrada an A (*)(), un puntero a una función que no toma argumentos y devuelve un A. La razón de esto es que no puede tener un objeto de tipo A()en C ++, aunque puede tener un puntero a un A().
A()fueAel constructor?