From c6a4fdb3934e573abc72b67302cb690207c8e585 Mon Sep 17 00:00:00 2001 From: "Marco Antonio J. Costa" Date: Wed, 22 Jul 2026 13:10:36 -0300 Subject: [PATCH] give the drug item draw an engine it can take by reference std::uniform_int_distribution::operator() takes its engine by non-const reference, and the call passes a freshly constructed std::mt19937 temporary. MSVC binds it anyway; clang-cl reports error: no matching function for call to object of type 'std::uniform_int_distribution<>' note: candidate function not viable: expects an lvalue for 1st argument Naming the engine is enough. Behaviour is unchanged: the engine is still seeded from std::random_device and still discarded after the single draw. --- Strategic/Facilities.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Strategic/Facilities.cpp b/Strategic/Facilities.cpp index 82a8e6b2f..731efa26d 100644 --- a/Strategic/Facilities.cpp +++ b/Strategic/Facilities.cpp @@ -1817,7 +1817,8 @@ void HandleRisksForSoldierFacilityAssignment( SOLDIERTYPE *pSoldier, UINT8 ubFac } else { - INT16 sItemId = riskDrugItems[std::uniform_int_distribution<>(0, riskDrugItems.size() - 1)(std::mt19937{ std::random_device{}() })]; + std::mt19937 engine{ std::random_device{}() }; + INT16 sItemId = riskDrugItems[std::uniform_int_distribution<>(0, riskDrugItems.size() - 1)(engine)]; CreateItem(sItemId, Item[sItemId].usPortionSize, &gTempObject);