我必须从 percona 的 github 存储库中编译 tokumx 的代码。它包含关于使用的歧义。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 编译过,是否可以安全地修补该特定位置,或者我是否冒着可能导致严重运行时错误的行为发生不可见变化的风险?(我所说的不可见是指在编译时不会发生的错误,而是在运行时导致错误的行为变化,例如内存泄漏或崩溃。)