Existe um uso para declarações de function dentro de funções?

Podemos declarar funções dentro de funções (eu queria uma variável local, mas analisa como uma declaração de function):

struct bvalue; struct bdict { bdict(bvalue); } struct bvalue { explict operator bdict() const; } struct metainfo { metainfo(bdict); } void foo(bvalue v) { metainfo mi(bdict(v)); // parses as function declaration metainfo mi = bdict(v); // workaround // (this workaround doesn't work in the presence of explicit ctors) } 

São as únicas razões “porque torna o analisador mais simples” e “porque o padrão diz isso”, ou existe um uso obscuro para isso?

Esta é realmente uma questão C, porque esse comportamento foi herdado diretamente de C (embora fique muito mais em C ++ por causa da análise mais complicada ).

Eu suspeito que a resposta (no contexto de C, pelo menos) é que isso permite que você esclareça a existência de suas declarações de function exatamente onde elas são necessárias. Talvez isso tenha sido útil nos primeiros dias de C. Duvido que alguém faça isso mais, mas, por uma questão de retrocompatibilidade, ele não pode ser removido do idioma.

É útil se você precisar usar uma function externa cujo nome entraria em conflito com uma function ou variável interna (estática) na unidade de tradução atual (arquivo de origem). Por exemplo (bobo, mas fica claro):

 static int read(int x) { return bar(x); } static int foo() { ssize_t read(int, void *, size_t); read(0, buf, 1); } 

Uma declaração de function dentro de outra function oculta outras funções sobrecarregadas. Por exemplo, erro do compilador na linha 7

 #include  void f(int); int main() { void f(char *); f(10); // Line 7 f("Hello world"); return 0; } void f(int a) { std::cout << a; } void f(char *str) { std::cout << str; } 

São as únicas razões “porque torna o analisador mais simples” e “porque o padrão diz isso”

Sim, basicamente.

Tudo o que pode ser uma declaração de function, é uma declaração de function.

Infelizmente é um daqueles casos “just is”.