I have this code:
class DoorKeeper;
struct Door {
class Key {
Key() = default;
// ~Key() = default; // [1]
friend DoorKeeper;
};
void open(Key) {}
};
int main(int, char **) {
Door().open(Door::Key()); // always complain that constructor is private
Door().open(Door::Key{}); // complains only about destructor [1] if uncommented
}
I would expect the 2 lines in main to behave in the same way, but ends up I do not get any error when using curly braces. I can get an error by adding a member to Key class or by adding a destructor.
What can be the reason for this?