PR68925 don't use thread_local static for stateless object

PR libstdc++/68925
	* include/experimental/random (randint): Use temporary instead of
	thread_local static.

From-SVN: r244584
This commit is contained in:
Jonathan Wakely 2017-01-18 17:18:47 +00:00 committed by Jonathan Wakely
parent 46c4e8a1cf
commit b08fdbb845
2 changed files with 10 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2017-01-18 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/68925
* include/experimental/random (randint): Use temporary instead of
thread_local static.
2017-01-17 Joshua Conner <joshconner@google.com>
* crossconfig.m4: Add fuchsia OS.

View File

@ -54,8 +54,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static_assert(is_integral<_IntType>::value && sizeof(_IntType) > 1,
"argument must be an integer type");
using _Dist = std::uniform_int_distribution<_IntType>;
static thread_local _Dist __dist;
return __dist(_S_randint_engine(), typename _Dist::param_type{__a, __b});
// This relies on the fact our uniform_int_distribution is stateless,
// otherwise we'd need a static thread_local _Dist and pass it
// _Dist::param_type{__a, __b}.
return _Dist(__a, __b)(_S_randint_engine());
}
inline void