The specific std::uniform_int_distribution<__int128_t>{INT64_MIN, INT64_MAX} produces values that are not in range. Changing any of the parameters -- e.g. using std::int64_t as type or making either of the limits smaller or larger -- causes the problem to go away. The incorrect values are completely out-of-range, not marginal off-by-one errors. I have created the following test program and could reproduce the issue with every version of libc++ and set of compiler options I've tried; the problem never occurs with -stdlib=libstdc++ so it seems to me to be a library rather than a compiler issue. https://godbolt.org/z/z5WYsKEv6 This is a minimal version (with no output) of the demo linked above to reproduce the problem: #include <cstdint> #include <cstdlib> #include <random> int main() { auto engine = std::default_random_engine{}; auto distro = std::uniform_int_distribution<__int128_t>{INT64_MIN, INT64_MAX}; for (auto i = 0; i < 1000; ++i) { const auto n = distro(engine); if ((n < distro.min()) || (n > distro.max())) { return EXIT_FAILURE; } } return EXIT_SUCCESS; }