Функция 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);
}

Почему я не могу скомпилировать?

Ответы на вопрос(3)

Ваш ответ на вопрос