This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 114b. See for the official list.


2110. Overload resolution for base class conversion and reference/non-reference

Section:  [over.ics.rank]     Status: drafting     Submitter: Alexander Kulpin     Date: 2015-03-27

There are overload tiebreakers that order reference/nonreference and base/derived conversions, but how they relate is not specified. For example:

  struct A { A(); };
  struct B : A {};
  struct C : B {};

  void f1(B&);
  void f1(A);

  void f2(B);
  void f2(A&);

  int main()
     C v;
     f1(v); // all compilers choose f1(B&)
     f2(v); // all compilers choose f2(B)

The Standard does not appear to specify what happens in this case.