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

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] Check request: bugprone-unreached-function-overload
        </td>
    </tr>

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

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

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

<pre>
    ```
template<typename T>
void foo(T x) { std::cout << "Template: " << x << "\n"; }

int main() {
    foo(42);      // OK: `Template: 42`
    foo("hello"); // BAD: `Template: hello` (`const char*: hello` expected)
}

// defined after it's being used
void foo(const char* s) { std::cout << "const char*: " << s << "\n"; }
```

Possible fix is to declare `foo(const char* s)` before `main` function.
Another fix is to move `foo(const char* s)` definition before `main` function.

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEU02P6ygQ_DXtC0pEGtuJDz6QZHPZw-5h_gCGdswugTzAUeb9-ic7npmM3sdYlhCiq4qqplVK9uyJWqj2UB0LNeYhxNaQ_x4icl50wby2UPPl5zLT5epUJhCH_Holry7EXkD8BVzegjWsDwFw98LugA2D7Z6lbEBIEFKHMTMQBxAHBogv70Ry2r6d3J9KoDr4aRF7BtsjcAlcWp_ZRVkPuFsUgEvG2CJcImAzAeYP8AR4Yv_8PYvU_FmzxIehDywgDuRcmCQfJAt-L4-_IHjU1pxN0Jrr4FNmelARUH46p_uVdCYzkXL57mQhN9RbT4apPlNkNgNuE-vI-jMbE5nPuX4SYemrjH-601PQ6Y9BP3UcuPw3pGQ7R6y3d2YTy4EZ0k5FmkL53dUm7x314VE1N63mrB-9zjb4NXApfcgDxSfaS7h9yTknZieOL-gL0wrTiEYV1G62ZVPithJYDG1Ppt40XO9qrLjeGr3bVH3ZdwL7HTccC9six4rXvOGcVwLXXUllXZmmEhVt680OSk4XZd3audtlHeK5sCmN1G5KIbApnOrIpXmqELVT_rzK1rzOUR-L2E6oVTeeE5Tc2ZTTB0-22c3z-ASrjuwwkP6fRfo2UspTK7vxfI3B02r0kZQeyKzevK_CjaILyhRjdO2Q8zVNz2N-b2ebh7Fb63ABPE2iy7K6xvAf6Qx4mp0kwNNi5tbijwAAAP__Uic2xQ">