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