Tipo de retorno do operador condicional e pesquisa em duas fases

Considere o seguinte trecho:

struct Base { };
struct Derived : Base { };

void f(Base &) { std::cout << "f(Base&)\n"; }

template <class T = int>
void g() {
    Derived d;
    f(T{} ? d : d); // 1
}

void f(Derived &) { std::cout << "f(Derived&)\n"; }

int main() {
    g();
}

Nesse caso, acho que a chamada de função paraf às// 1 deve ser procurado na primeira fase, já que o tipo de argumento é inequívocoDerived&e, portanto, seja resolvido paraf(Base&) que é o único no escopo.

Clang 3.8.0 concorda comigo, masO GCC 6.1.0 nãoe adia a pesquisa def até a fase dois, ondef(Derived&) é captado.

Qual compilador está certo?

questionAnswers(3)

yourAnswerToTheQuestion