лягушатые сообщения об ошибках для полных имен и использования объявлений - PullRequest
1 голос
/ 15 апреля 2019

Рассмотрим следующий код.

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 и получаю ошибку. Эта ошибка, по крайней мере в clang, будет выглядеть примерно так:

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

Я бы предпочел ошибку, указанную для B::X.

Есть ли способ настроить сообщения об ошибках clang для использования мест использования объявлений вместо псевдонима?

1 Ответ

0 голосов
/ 15 апреля 2019

Я думаю, это хорошо, что компилятор использует 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;
}

Может быть структура X, объявленная в пространстве имен B, а затем это B :: X, и необходимо вызвать другую A :: B ::C :: D :: E :: X, поскольку в противном случае их нельзя было бы различить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...