<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 - error: use of overloaded operator '*' is ambiguous"
   href="https://bugs.llvm.org/show_bug.cgi?id=36131">36131</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>error: use of overloaded operator '*' is ambiguous
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>5.0
          </td>
        </tr>

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

        <tr>
          <th>OS</th>
          <td>Linux
          </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>stsp@list.ru
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>dgregor@apple.com, llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=19762" name="attach_19762" title="test-case">attachment 19762</a> <a href="attachment.cgi?id=19762&action=edit" title="test-case">[details]</a></span>
test-case

The following code compiles with g++ but not clang++:
---
class A {
    char a;
public:
    operator char *() { return &a; }
    template<typename T0>
    operator T0 *() { return &a; }
};

int main()
{
    A a;
    return *a;
}
---
$ clang++ overl.cpp 
overl.cpp:12:12: error: use of overloaded operator '*' is ambiguous
      (operand type 'A')
    return *a;
           ^~
overl.cpp:12:12: note: built-in candidate operator*(char *)
overl.cpp:12:12: note: built-in candidate operator*(const char *)
---

Initially I thought this may be a gcc bug.
This code is probably invalid.
But the interesting thing is that if I change
"T0" to "const char" in line 6 leaving line 5
untouched, then clang++ compiles it. I don't
think something should change if I change the
templated type to explicit type, so I think
this is a clang's bug.</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>