<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 - Incorrect (ambiguous) overload resolution when converting initializer list to array"
   href="https://bugs.llvm.org/show_bug.cgi?id=40098">40098</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Incorrect (ambiguous) overload resolution when converting initializer list to array
          </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>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>miyuki-llvm@miyuki.ru
          </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>Consider the following code:

struct S {
    S(int i=1) {}
} s1, s2;

int f(S (&&r)[2]) { return 100; }
int f(S (&&r)[3]) { return 200; }

int main() {
    int g = f({s1, s2});
    // assert(g == 100);
}

According to [over.ics.rank]/3.1.2: 
"List-initialization sequence L1 is a better conversion sequence than
list-initialization sequence L2 if:
- ...
- L1 converts to type “array of N1 T”, L2 converts to type “array of N2 T”, and
N1 is smaller than N2"

I.e., the correct behaviour is to call the first overload. Instead Clang
rejects the code because it considers the call ambiguous.</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>