C++ Scoping and ambiguity in constructor overloads
<p>I've tried the following code snippet in 3 different compilers (G++, clang++, CL.exe) and they all report to me that they cannot disambiguate the overloaded constructors. Now, I know how I could modify the call to the constructor to make it pick one or the other (either make  explicit that the second argument is a unsigned literal value or explicitly cast it).</p>

<p>However, I'm curious why the compiler would be attempting to choose between constructors  in the first place given that one of the constructors is private and the call to the constructor is happening in the main function which should be outside the class's scope. </p>

<p>Can anyone enlighten me? </p>

<pre><code>class Test
{
private:
        Test(unsigned int a, unsigned int *b) { }
public:
        Test(unsigned int a, unsigned int b) { }
};

int main()
{
        Test t1 = Test(1,0);  // compiler is confused
}
</code></pre>
