#include <iostream>

class A
{
public:
	class Key
	{
		Key() {}
		Key(Key const &) {}
	};
	
	A(Key key, int a = 5) {}
};

int main() {
	A a(A::Key()); // this compiles !!!
	A a2(A::Key(), 5); // this doesn't
	// somehow defaulting the argument causes the private constructor
	// to be OK - no idea why
	return 0;
}