Here is an example
struct Node {
int value;
Node* left;
Node* right;
};
bool parse(const char*);
Node* parsePrimaryExpr();
auto parseMulExpr(auto node) {
if (node == nullptr) node = parsePrimaryExpr();
if (!parse("*")) return node;
return parseMulExpr(new Node{.left = node, .right = parsePrimaryExpr()});
}
int main(){
parseMulExpr((Node*)nullptr);
}
Clang gives this error
<source>:13:10: error: function 'parseMulExpr<Node *>' with deduced return type cannot be used before it is defined
13 | return parseMulExpr(new Node{.left = node, .right = parsePrimaryExpr()});
| ^
<source>:10:6: note: 'parseMulExpr<Node *>' declared here
10 | auto parseMulExpr(auto node) {
| ^
1 error generated.
Compiler returned: 1
https://godbolt.org/z/7WTYYben5