From cb319b3e67ef0802420c5095b7b67026ce392853 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Mon, 10 Jun 2024 14:20:31 -0700 Subject: Fix implicit conversion of temporary bitgen to BitGenRef There is no reason a temporary *shouldn't* be usable with BitGenRef (indeed, ABSL_ATTRIBUTE_LIFETIME_BOUND should catch errors) and it is useful when passing a temporary bitgen as an input argument. PiperOrigin-RevId: 642021132 Change-Id: I03e46f5f437e40a0c6225ea1f0361475a3501513 --- absl/random/bit_gen_ref.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/absl/random/bit_gen_ref.h b/absl/random/bit_gen_ref.h index 2160a8dd..ac26d9d4 100644 --- a/absl/random/bit_gen_ref.h +++ b/absl/random/bit_gen_ref.h @@ -111,20 +111,21 @@ class BitGenRef { BitGenRef& operator=(const BitGenRef&) = default; BitGenRef& operator=(BitGenRef&&) = default; - template ::value && - random_internal::is_urbg::value && - !HasInvokeMock::value)>* = nullptr> - BitGenRef(URBG& gen ABSL_ATTRIBUTE_LIFETIME_BOUND) // NOLINT + template < + typename URBGRef, typename URBG = absl::remove_cvref_t, + typename absl::enable_if_t<(!std::is_same::value && + random_internal::is_urbg::value && + !HasInvokeMock::value)>* = nullptr> + BitGenRef(URBGRef&& gen ABSL_ATTRIBUTE_LIFETIME_BOUND) // NOLINT : t_erased_gen_ptr_(reinterpret_cast(&gen)), mock_call_(NotAMock), generate_impl_fn_(ImplFn) {} - template , typename absl::enable_if_t<(!std::is_same::value && random_internal::is_urbg::value && HasInvokeMock::value)>* = nullptr> - BitGenRef(URBG& gen ABSL_ATTRIBUTE_LIFETIME_BOUND) // NOLINT + BitGenRef(URBGRef&& gen ABSL_ATTRIBUTE_LIFETIME_BOUND) // NOLINT : t_erased_gen_ptr_(reinterpret_cast(&gen)), mock_call_(&MockCall), generate_impl_fn_(ImplFn) {} -- cgit v1.2.3