<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - template type deduction handled improperly with implicit overload resolution"
   href="https://bugs.llvm.org/show_bug.cgi?id=43287">43287</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>template type deduction handled improperly with implicit overload resolution
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>compnerd@compnerd.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>blitzrakete@gmail.com, dgregor@apple.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>I believe that clang is handling template type deduction improperly for forward
declarations of templates with overload resolution.  Consider the following:

```
#include <type_traits>

template<typename U>
int f(const U t);

int v;
auto test = f(v);

template<typename U>
int f(U t) {
  static_assert(!std::is_const<decltype(t)>::value, "t should be non-const");
  return 0;
}
```

GCC correctly identifies this as `int` rather than `const int`.  I believe that
the type information is being preserved from the canonical decl from which this
overload is being referenced.  This was reduced from another test case which
results in an invalid function call.

Sorry, I couldn't really come up with a good summary</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>