объявить функцию друга шаблона класса шаблона

У меня есть шаблон классаObj и шаблон функции.make_objObj имеетprivate Определен единственный конструктор, который принимает ссылку на свой шаблонный тип для привязки.

template 
class Obj {
  private:
    T& t;
    Obj(T& t)
        : t{t}
    { }
};

template 
Obj make_obj(T& t) { 
    return {t};
}

То, что я хочу, это объявитьmake_obj функция аfriend так что это может создатьObjs, но никто другой не может (кроме как через копию ctor).

Я пробовал несколько объявлений друзей, в том числе

friend Obj make_obj(T&);

а также

template 
friend Obj make_obj(T2&);

Последнее является менее желательной попыткой создания всех шаблонных экземпляровmake_obj друзьяObj учебный класс. Однако в обоих случаях я получаю одну и ту же ошибку:

error: calling a private constructor of class 'Obj'
    return {t};
           ^

note: in instantiation of function template specialization
      'make_obj' requested here
    auto s = make_obj("hello");
             ^

пытаясь сделатьmake_obj("hello"); для примера.

Как я могу разрешить толькоmake_obj доступ к 'ObjS значение конструктора?

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

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