Мне нужно скомпилировать код 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 лет назад, это правильно?
- Когда (какая версия gcc / clang) была C ++ 11 по умолчанию?
- Есть ли какой-нибудь волшебный флаг компилятора, который мог бы решить проблему даже с C ++ 11?
- Теперь о бонусном вопросе: если это программное обеспечение никогда не компилировалось с C ++ 11, безопасно ли вообще исправлять это конкретное место или я рискую невидимыми изменениями в поведении, которые могут привести к серьезным ошибкам во время выполнения? (Под невидимым я подразумеваю ошибки, которые не возникают во время компиляции, а скорее изменяют поведение, которое приводит к ошибкам во время выполнения, таким как утечки или сбои памяти.)