ADL与静态数据成员

时间:2014-08-25 05:22:41

标签: c++ argument-dependent-lookup

ADL是否可能与静态数据成员一起出现?虽然*test::A::a存在于*A::a的周围名称空间内,但我无法A::a operator +

namespace test
{
    struct A
    {
        int n;
        static A* a;
    };

    A b;
    A* A::a = &b;

    int operator +(const A& a, const A& b)
    {
        return a.n + b.n;
    }
}

int main()
{
    test::A a;
    // PROBLEM HERE
    *A::a + a;
}

1 个答案:

答案 0 :(得分:0)

问题是operator+()的左手参数需要命名空间:

namespace test
{
    struct A
    {
        int n;
        static A* a;
    };

    A b;
    A* A::a = &b;

    int operator +(const A& a, const A& b)
    {
        return a.n + b.n;
    }
}

int main()
{
    test::A a;
    // qualify A::a with namespace test
    *test::A::a + a;
}