限定名称和使用声明操作的 clang 错误消息

clang error messages for qualified names and using declaractions

本文关键字:clang 错误 消息 操作 声明 定名称      更新时间:2023-10-16

请考虑以下代码。

namespace A::B::C::D::E {
    struct X { };
}
namespace B {
    using namespace A::B::C::D::E;
    // or, using A::B::C::D::E::X;
    // or, using X = A::B::C::D::E::X;
}

假设我以某种方式错误地使用了 B::X 并收到错误。这个错误,至少在叮当中,看起来像

error: ... for type A::B::C::D::E::X .

我宁愿为B::X说明错误.

有没有办法将 clang 错误消息配置为使用声明的位置,而不是别名实体?

我认为编译器使用 A::B::C::D::E::X 是件好事,否则可能会模棱两可。如以下示例所示:

namespace A::B::C::D::E {
    struct X {
      int y;
    };
}
namespace B {
  using namespace A::B::C::D::E;
  void foo() {
    X aa;
    B::X bb;
    aa.y = 0;
  }
  struct X {
    int z;
  };
  void bar() {
    X aa;
    B::X bb;
    aa.y = 0;
  }
}
int main() {
  return 0;
}
可以在 B 命名空间中声明一个结构 X,然后是 B::X,并且

有必要调用另一个结构 A::B::C::D::E::X,否则无法区分它们。

相关文章: