Функция Friend не может создать уникальный указатель класса
У меня есть определенная стратегия проектирования, при которой конструктор моего класса является личным и может быть создан только друзьями класса. Внутри функции друга я пытаюсь создать unique_pointer своего класса, используяstd::make_unique
но это не компилируется. Мой компилятор VC12 жалуется
c: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ memory (1639): ошибка C2248: «Спам :: Спам»: невозможно получить доступ к закрытому члену, объявленному в классе «Спам»
Соответствующий код, который не выполняется во время компиляции, выглядит следующим образом
#include <memory>
class Spam {
public:
friend void Foo();
private:
Spam(int mem) :mem(mem) {}
int mem;
};
void Foo() {
std::unique_ptr<Spam> spam = std::make_unique<Spam>(10);
}
Почему я не могу скомпилировать?