典型的なC ++コードは次のとおりです。
foo.hpp
#pragma once
class Foo {
public:
  void f();
  void g();
  ...
};foo.cpp
#include "foo.hpp"
namespace {
    const int kUpperX = 111;
    const int kAlternativeX = 222;
    bool match(int x) {
      return x < kUpperX || x == kAlternativeX;
    }
} // namespace
void Foo::f() {
  ...
  if (match(x)) return;
  ...それはまともな慣用的なC ++コードのように見えます-クラス、そのヘルパー関数のいくつかの定数matchによって使用されるFooヘルパー関数。
そして、テストを書きたいです。
それはmatch全く自明ではないので、別個の単体テストを記述することは完全に論理的です。
ただし、匿名の名前空間に存在します。
もちろん、私は呼び出すテストを書くことができますFoo::f()。しかし、Foo重くて複雑な場合、良いテストにはなりません。そのようなテストは、他の無関係な要因から被験者を隔離しません。
そのmatchため、匿名の名前空間から移動する必要があります。
質問:関数や定数をテストで使用できなくする場合、匿名の名前空間に関数や定数を入れる意味は何ですか?
friendその目的のためにキーワードを乱用することは推奨されないという、多くの専門家の大きなコンセンサスがあります。メソッドの制限が、それ以上直接テストできない状況につながる場合、プライベートメソッドが役に立たないことを意味します。
                
foo.cppヘッダーではなくにあります!OPは、ヘッダーにanon名前空間を入れてはならないことをよく理解しているようです。