precedência de conversão em c ++

Eu tenho o seguinte 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

Na função principal:

h(1);

A função que h (1) chama é f1.

Minha pergunta é por que ele escolhe chamar isso. 1 é um int e, portanto, requer conversão implícita para double. Ele poderia facilmente converter o int em um A usando o construtor de conversão definido acima. Por que não recebo um erro? Quais são as regras de precedência com o casting?

N.b. Eu postei acima do código que acho que será necessário para responder a pergunta, mas abaixo eu estou postando o código inteiro:

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

questionAnswers(2)

yourAnswerToTheQuestion