Why is the compiler thinking this constructor overload resolution is ambiguous?

I'm missing why the compiler (Visual Studio 2017) is thinking this semi-recursive overload resolution is ambiguous, and casting is required:

class A
{
public:
    A(int a) {}
};

class B
{
public:
    B(A a) {}
};

void func(B b) {}

void useCase()
{
    func((B)1);   // OK! So it "knows" how to convert from 1 to B 
    func(1);      // ERROR: why is it ambiguous to convert 1, when no alternative exists?
    func((int)1); // ERROR: why is it ambiguous to convert 1, when no alternative exists?
}

Error is: error C2664: 'void func(B)': cannot convert argument 1 from 'int' to 'B' note: No constructor could take the source type, or constructor overload resolution was ambiguous

I can work around this, and I'm sure I'm missing something obvious, but I'd love to know what's going on. ;)