Где в стандарте есть функции, возвращающие функции, запрещенные? Я понимаю, что они концептуально смешны, но мне кажется, что грамматика позволит им. Согласно этой веб-странице, noptr-declarator [является] допустимым декларатором", который будет включать в себя декларатор функции:
int f()();
Относительно синтаксиса.
Мне кажется, что синтаксис, описанный в [dcl.decl], позволяет
int f(char)(double)
который можно интерпретировать как функцию f
, которая принимает char
и возвращает функцию с той же сигнатурой, что и int g(double)
.
1 declarator:
2 ptr-declarator
3 noptr-declarator parameters-and-qualifiers trailing-return-type
4 ptr-declarator:
5 noptr-declarator
6 ptr-operator ptr-declarator
7 noptr-declarator:
8 declarator-id attribute-specifier-seq opt
9 noptr-declarator parameters-and-qualifiers
10 noptr-declarator [ constant-expression opt ] attribute-specifier-seq opt
11 ( ptr-declarator )
12 parameters-and-qualifiers:
13 ( parameter-declaration-clause ) cv-qualifier-seqAfter
Грубо говоря, после 1- > 2, 2 = 4, 4- > 6, 4- > 6 Вы должны иметь ptr-оператор ptr-оператор ptr-operator Затем для первого декларатора используйте 4- > 5, 5 = 7, 7- > 8; используйте 4- > 5, 5 = 7, 7- > 9 для второго и третьего деклараторов.