Я использую серию boost (de) для реконструкции классов без общедоступных ctors по умолчанию. Я объявляю частный ctor по умолчанию и объявляю класс доступа boost как друга, и он использует ctor по умолчанию как часть процесса десериализации. Но он не может восстановить std::pair
, если я не сделаю общедоступный ctor по умолчанию. Я бы лучше объявил о дружбе, но я не могу понять, как.
Ниже приведен упрощенный пример:
class PrivateDC
{
private:
friend class PrivateDCFriend;
friend struct std::pair<int, PrivateDC>;
PrivateDC() = default;
};
class PrivateDCFriend
{
void f() const
{
PrivateDC a; // this works, proves friendship
std::pair<int, PrivateDC> b; // gets compile error
}
};
Ошибка: «нет подходящего конструктора для инициализации 'std :: pair '». Я не получаю сообщение об ошибке, если ctor по умолчанию является общедоступным.
Как я могу объявить std::pair
как друга, чтобы это работало?