У меня есть следующая функция компоновщика:
template <typename T>
struct Wrapper {
Wrapper(T);
};
template <typename T, typename... Args>
inline Wrapper<T>
buildWrapper(Args&&... args) noexcept {
return Wrapper<T>(T(std::forward<Args>(args)...));
}
Я хочу сделать это единственным, что может создать экземпляр следующего класса, поэтому я сделал ctor закрытым и попытался пометить Приведенный выше шаблон работает как друг.
class Bar {
private:
Bar(bool);
friend inline Wrapper<Bar> buildWrapper<Bar>(bool) noexcept;
}
Но это приводит к ошибке:
error: no function template matches function template specialization 'buildWrapper'
note: candidate template ignored: could not match 'type-parameter-0-1 &&' against 'bool'
Я пробовал некоторые разумно выглядящие варианты, но я просто не уверен, что правильно Синтаксис здесь, чтобы объявить специализацию шаблона как друга.