Wie kann ich eine Funktionsvorlage innerhalb einer Klassenvorlage anfreunden?C++

Programme in C++. Entwicklerforum
Guest
 Wie kann ich eine Funktionsvorlage innerhalb einer Klassenvorlage anfreunden?

Post by Guest »

Ich habe das Gefühl, dass es sich hierbei um ein Duplikat handeln muss, aber ich sehe es bei einer oberflächlichen Suche nicht.
Hier liegt im Grunde das Problem. Ich möchte ein Mitglied privat halten, aber die Verwendung der Funktion auf Namespace-Ebene (ohne ADL) zulassen:

Code: Select all

#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());
}
Leider funktioniert dies aufgrund eines unvollständigen Fehlers nicht:

Code: Select all

member access into incomplete type 'const S'
friend constexpr decltype(std::declval().bar()) ns::foo(S const &c);
^
Wie kann ich erklären, dass ns::foo ein Freund meiner Klasse ist?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post