<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/71015>71015</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] seems like bug with return type deduction in case of recursive function (works in GCC)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          vampyrofangclub
      </td>
    </tr>
</table>

<pre>
    Here is an example
```cpp
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
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VE1v4zYQ_TWjy2ANibQi66CDY8ftpUUPBYo9UuJIYpciBX44m_76gpIVJ0HQRS9rGJT08Dh882aGwns1GKIGykcoz5mIYbSuuYppfnG2F2bodGyz1sqX5ldyhMqjMEjfxTRrgvwM-REe8vXfzfOK-OBiF_B3KwmhelxBRGUCXoWOBPwVSxxgR9TUhzu8oU4N4x2G6nx_X9bWWo2zcJ6AHTprfMBuFA7YEVj9yt2iLcQ_nJqEe3n6Pjtgh7e0dRUx2JX5W9Q31oKZJUr9LqEegR3MkiY_Az-jiVrPwSXeBv_o2C0MsGLLBBhbUmCJx2p0FKIzq4LXbTfwg1RDz6t71eMuebooWKWfcLf4-V-iqvM7R6rzW2tS_SahzMbdlHyQAOxwcxxYfTfkk6hb46yfJy3MgIO6kscwKo_knHWfUoGfvI2uI-BPwI8FT0sO_Hjbw4_YR9MFZQ0Cq94J5Ke1L9kxbWYVPqswoiQZO5Kbq-FlJuyEMTZgSxg9SWypt2kCQhoCSb0yJLcSYsERqhPizygLLr90HJRPnxuSvHhINhgbKD1_6IKkTgtHEkdyt8HGIl9O-T8jsSlbXzZ5xVoXHMiQE4Hk7lZyO81Kk7u5RjJJLT4t-RjC7IEfgV2AXQYrW6vDzroB2OUfYJfqrz-_fm3JlJlsuKx5LTJqiof6cKgPZVllY1O3-7ase844cV5WPC8F6w9txaV8KCtqM9WwnPGiyFm-L8qy2pWScVHUOdV53ZZ7BvucJqH0TuvrlM7OlPeRmqrIizLToiXtl5uUsS41c5rg8py5JvG_tHHwsM-18sHfIwQV9HL9rjvKM3qiyaNW3wjbOKzt-bYtl1ZdWlsZ7IQntD066qLz6kpvG__wbN03n2i_nE7A6iw63XwwUoUxtrvOTsAuSdTt8WV29m_qArDLkqNPFqc0_w0AAP__WfjXEg">