Tipo de retorno del operador condicional y búsqueda en dos fases

Considere el siguiente fragmento:

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();
}

En este caso, creo que la función llama af a// 1 debe buscarse en la fase uno, ya que el tipo de su argumento es inequívocamenteDerived&, y así se resolverá af(Base&) cuál es el único en alcance.

Clang 3.8.0 está de acuerdo conmigo, peroGCC 6.1.0 noy difiere la búsqueda def hasta la fase dos, dondef(Derived&) es recogido

¿Qué compilador es el correcto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta