Компилятор когда-либо разрешал неоднозначности пространства имен? - PullRequest
0 голосов
/ 07 января 2019

Мне нужно скомпилировать код tokumx из репозитория Percona github. Он содержит двусмысленность относительно использования shared_ptr.

Короче говоря, картина выглядит следующим образом:

namespace baz
{
    class integer;
}

namespace bar
{
    class integer;
}

namespace foo
{
    using namespace bar;
    using baz::integer;
}

namespace main
{
    using namespace foo;

    void f(const integer&);
}

Естественно, это не скомпилируется. И я здесь не для того, чтобы спрашивать, почему, а скорее для того, чтобы понять, как этот когда-либо компилировался , и могу ли я вообще доверять этой базе кода. Этот код был написан в 2014 году, и C ++ 11 в те времена определенно был чем-то особенным. Я подозреваю, что этот код никогда не был скомпилирован с C ++ 11 просто потому, что компиляторы не использовали этот стандарт по умолчанию 5 лет назад, это правильно?

  1. Когда (какая версия gcc / clang) была C ++ 11 по умолчанию?
  2. Есть ли какой-нибудь волшебный флаг компилятора, который мог бы решить проблему даже с C ++ 11?
  3. Теперь о бонусном вопросе: если это программное обеспечение никогда не компилировалось с C ++ 11, безопасно ли вообще исправлять это конкретное место или я рискую невидимыми изменениями в поведении, которые могут привести к серьезным ошибкам во время выполнения? (Под невидимым я подразумеваю ошибки, которые не возникают во время компиляции, а скорее изменяют поведение, которое приводит к ошибкам во время выполнения, таким как утечки или сбои памяти.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...