Как подружить шаблон функции внутри шаблона класса?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как подружить шаблон функции внутри шаблона класса?

Сообщение Anonymous »

Мне кажется, что это дубликат, но при беглом поиске я его не вижу.
Вот в чем основная проблема. Я хочу сохранить конфиденциальность участника, но разрешить использование функции уровня пространства имен (без ADL):

Код: Выделить всё

#include 

namespace ns
{
template
decltype(std::declval().bar()) foo(T const &v) { return v.bar(); }
}

template
class S
{
void bar() const { }
public:
friend constexpr decltype(std::declval().bar()) ns::foo(S const &c);
};

int main()
{
ns::foo(S());
}
К сожалению, это не работает из-за ошибки неполного типа:

Код: Выделить всё

member access into incomplete type 'const S'
friend constexpr decltype(std::declval().bar()) ns::foo(S const &c);
^
Как я могу объявить, что ns::foo является другом моего класса?

Подробнее здесь: https://stackoverflow.com/questions/793 ... s-template
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»