prioridad de conversión en c ++

Tengo el siguiente código:

Some functions:

A::A(int i_a) {cout<<"int Ctor\n";}          //conversion constructor

void h(double d) {cout<<"double param\n";}   //f1
void h(A a) {cout<<"A param\n";}             //f2

En la función principal:

h(1);

La función que llama h (1) es f1.

Mi pregunta es por qué elige llamar a eso. 1 es un int y, por lo tanto, requiere una conversión implícita para duplicarse. Con la misma facilidad podría convertir el int en una A utilizando el constructor de conversión definido anteriormente. ¿Por qué no me da un error? ¿Cuáles son las reglas de precedencia con el casting?

Nótese bien. He publicado sobre el código que creo que será necesario para responder a la pregunta, pero a continuación, estoy publicando el código completo:

 #include <iostream>
 using namespace std;
 class B;
 class A {
 public:
 explicit A(const B&) {cout<<"Ctor through B\n";}
 A() {cout<<"Default Ctor\n";}
 A(int i_a) {cout<<"int Ctor\n";}
 operator int() {cout<<"A => int\n"; return 2;}
 };
 class B {
 public:
 operator A() const {cout<<"B => A\n"; A a; return a;}
 };
 void h(double d) {cout<<"double param\n";}
 void h(A a) {cout<<"A param\n";}
 void f(const A& a)
 {
 cout<<"f function\n";
 //Without the const it will never try to convert
 }
 void main()
 {
 B b;
 cout <<"-----------------\n";
 f(b);
 cout <<"-----------------\n";
 h(1);
 }

Respuestas a la pregunta(2)

Su respuesta a la pregunta