unnamed namespaces

Unnamed (or anonymous) namespaces can be used for the functions appear only in file scope:

// sort_test.cpp
namespace {

std::mt19937 gen{std::random_device{}()};
using interval = std::uniform_int_distribution<>::param_type;
using int_distrib_t = std::uniform_int_distribution<int>;
int_distrib_t int_distrib;

std::uint8_t randomByte() { return int_distrib(gen, interval{0, 255}); }
std::uint16_t randomWord() { return int_distrib(gen, interval{0, 65'535}); }

}

TEST_CASE("Sort impl. correctness") {
std::vector<std::uint16_t> base(1'000);
std::generate(begin(base), end(base), []() { return randomWord(); });

auto expected = base;
std::sort(begin(expected), end(expected));

auto test = base;
mine::sort(begin(test), end(test));

EXPECT_EQ(test == expected);
}

more on: