В TOTW 153 утверждается, что использование пространства имен в области действия может утечь в глобальной области, другими словами, они утверждают, что это:
namespace totw {
namespace example {
namespace {
TEST(MyTest, UsesUsingDirectives) {
using namespace ::testing;
Sequence seq; // ::testing::Sequence
WallTimer timer; // ::WallTimer
}
} // namespace
} // namespace example
} // namespace totw
примерно эквивалентно:
using ::testing::Expectation;
using ::testing::Sequence;
using ::testing::UnorderedElementsAre;
...
// many, many more symbols are injected into the global namespace
namespace totw {
namespace example {
namespace {
TEST(MyTest, UsesUsingDirectives) {
Sequence seq; // ::testing::Sequence
WallTimer timer; // ::WallTimer
...
}
} // namespace
} // namespace example
} // namespace totw
Поэтому я ожидал, что если я сделаю это, он скомпилирует:
#include <gtest/gtest.h>
#include <gmock/gmock.h>
namespace totw {
namespace example {
namespace {
TEST(MyTest, UsesUsingDirectives) {
using namespace ::testing;
Sequence seq; // ::testing::Sequence
}
} // namespace
} // namespace example
} // namespace totw
Sequence s; //notice no testing::
Это не . Поэтому мне интересно, ошибаюсь ли я в репликации этого примера, или пример TOTW153 вводит в заблуждение?
Мое лучшее предположение состоит в том, что их пример "неверен" в том смысле, что то, что они утверждают, примерно эквивалентно, на самом деле не эквивалентно в некотором смысле, я бы предположил, что это так.