https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118665
Bug ID: 118665 Summary: std::uniform_int_distribution infinite loop with generator returning 0 Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: cgnitash at gmail dot com Target Milestone: --- Passing a custom generator that always returns 0 to std::uniform_int_distrubtion<int> causes it to hang (presumably due to an infinite loop) #include <random> class Gen { public: using result_type = std::mt19937::result_type; Gen() : rng(0) {} static constexpr result_type min() { return std::mt19937::min(); } static constexpr result_type max() { return std::mt19937::max(); } // always return 0 result_type operator()() { return 0; } private: std::mt19937 rng; }; int main() { Gen g; std::uniform_int_distribution<int> dist(0, 42); return dist(g); // hangs } This only happens when operator() returns exactly 0. libc++ doesn't have this issue. Demo: https://godbolt.org/z/E8M5dhE59