自定义返回类型的全局命名空间中的friend函数

时间:2014-06-21 16:35:17

标签: c++ namespaces clang friend

我想从全局命名空间中创建一个类的朋友函数,这似乎工作正常,除非友元函数使用这样的自定义返回类型:

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;
}

如果使用int代替Type代码编译,但使用typedef编译器似乎不会将类型与命名空间分开,并给出错误:

error: expected a class or namespace
        friend Type ::myFunction();
               ^
error: C++ requires a type specifier for all declarations
        friend Type ::myFunction();

我在OS X上使用clang ++ 500.2.79。 我可以使用#define代替typedef作为示例中的解决方法,但在我的实际问题中,自定义类型来自另一个无法更改的头文件。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

这适用于GCC,但在VS13中不起作用,或者如你所说,在clang ++中。但是,这解决了VS13中的问题:

friend Type (::myFunction());