编译器是否曾经解决过名称空间的歧义?

时间:2019-01-07 08:34:18

标签: c++ c++11 tokumx

我必须从percona的github存储库中编译tokumx的代码。它包含与ambiguity有关的the use of 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编译过,是否可以安全地修补该特定位置?或者我冒着无形的行为变化而冒着严重的运行时错误的风险吗? (通过 invisible ,我的意思是在编译时不会发生的错误,而是行为的改变,这些错误会在运行时导致错误,例如内存泄漏或崩溃。)

0 个答案:

没有答案