Reputation: 53
I'd like to make a friend function of a class from a global namespace, which seems to work fine, unless the friend function uses a custom return type like this:
typedef int Type;
Type myFunction();
namespace foo {
class Foo
{
public:
friend Type ::myFunction();
private:
void bar() {}
};
}
Type myFunction()
{
foo::Foo a;
a.bar();
return 0;
}
If int
is used instead of Type
the code compiles, but with the typedef
the compiler does not seem to separate the type from the namespace, and gives an error:
error: expected a class or namespace
friend Type ::myFunction();
^
error: C++ requires a type specifier for all declarations
friend Type ::myFunction();
I'm using clang++ 500.2.79 on OS X.
I could use #define
instead of typedef
as a workaround in the example, but in my real-world issue the custom type is coming from another header file, which cannot be changed.
Any help would be appreciated.
Upvotes: 5
Views: 343
Reputation: 8805
This works in GCC, but doesn't work in VS13, or as you said, in clang++. However, this fixed the problem in VS13:
friend Type (::myFunction());
Upvotes: 7