Since
r9-2028-g8ba7f29e3dd064 we've defined most of <cstdint>
unconditionally, including uint_least32_t. This means that all of
<random> can be defined unconditionally, which means that std::shuffle
and std::ranges::shuffle can be too.
libstdc++-v3/ChangeLog:
* include/bits/algorithmfwd.h (shuffle): Do not depend on
_GLIBCXX_USE_C99_STDINT_TR1.
* include/bits/ranges_algo.h (shuffle): Likewise.
* include/bits/stl_algo.h (shuffle): Likewise.
* include/ext/random: Likewise.
* include/ext/throw_allocator.h (random_condition): Likewise.
* include/std/random: Likewise.
* src/c++11/cow-string-inst.cc: Likewise.
* src/c++11/random.cc: Likewise.
// set_symmetric_difference
// set_union
-#if (__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+#if __cplusplus >= 201103L
template<typename _RAIter, typename _UGenerator>
void
shuffle(_RAIter, _RAIter, _UGenerator&&);
inline constexpr __sample_fn sample{};
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
struct __shuffle_fn
{
template<random_access_iterator _Iter, sentinel_for<_Iter> _Sent,
};
inline constexpr __shuffle_fn shuffle{};
-#endif
struct __push_heap_fn
{
#endif // C++17
#endif // C++14
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
/**
* @brief Generate two uniformly distributed integers using a
* single distribution invocation.
for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first)));
}
-#endif // USE C99_STDINT
-
#endif // C++11
_GLIBCXX_BEGIN_NAMESPACE_ALGO
# include <emmintrin.h>
#endif
-#if defined(_GLIBCXX_USE_C99_STDINT_TR1) && defined(UINT32_C)
+#ifdef UINT32_C
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
#include <ext/opt_random.h>
#include <ext/random.tcc>
-#endif // _GLIBCXX_USE_C99_STDINT_TR1 && UINT32_C
+#endif // UINT32_C
#endif // C++11
}
};
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
/**
* @brief Base class for random probability control and throw.
*/
return _S_e;
}
};
-#endif // _GLIBCXX_USE_C99_STDINT_TR1
/**
* @brief Class with exception generation control. Intended to be
#endif
};
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
/// Type throwing via random condition.
struct throw_value_random : public throw_value_base<random_condition>
{
operator=(throw_value_random&&) = default;
#endif
};
-#endif // _GLIBCXX_USE_C99_STDINT_TR1
/**
* @brief Allocator class with logging and exception generation control.
#endif
};
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
/// Allocator throwing via random condition.
template<typename _Tp>
struct throw_allocator_random
operator=(const throw_allocator_random&) = default;
#endif
};
-#endif // _GLIBCXX_USE_C99_STDINT_TR1
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
}
};
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
/// Explicit specialization of std::hash for __gnu_cxx::throw_value_random.
template<>
struct hash<__gnu_cxx::throw_value_random>
return __result;
}
};
-#endif
#pragma GCC diagnostic pop
} // end namespace std
#else
#include <cmath>
+#include <cstdint> // For uint_fast32_t, uint_fast64_t, uint_least32_t
#include <cstdlib>
#include <string>
#include <iosfwd>
#include <limits>
#include <debug/debug.h>
#include <type_traits>
-
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
-#include <cstdint> // For uint_fast32_t, uint_fast64_t, uint_least32_t
#include <bits/random.h>
#include <bits/opt_random.h>
#include <bits/random.tcc>
-#endif // _GLIBCXX_USE_C99_STDINT_TR1
-
#endif // C++11
#endif // _GLIBCXX_RANDOM
# error This file should not be compiled for this configuration.
#endif
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
#include <random>
namespace std _GLIBCXX_VISIBILITY(default)
random_device::_M_init_pretr1(const std::string& token)
{ _M_init(token.c_str(), token.length()); }
} // namespace
-#endif
#include <random>
#include <system_error>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
#if defined __i386__ || defined __x86_64__
# include <cpuid.h>
# ifdef _GLIBCXX_X86_RDRAND
template struct __detail::_Mod<unsigned, 2147483647UL, 16807UL, 0UL>;
#endif
}
-#endif // _GLIBCXX_USE_C99_STDINT_TR1