randomgen: compile fixes for OSX (clang 11)
This commit is contained in:
parent
3f82f69374
commit
f0208ec71a
2 changed files with 39 additions and 2 deletions
|
|
@ -5,6 +5,37 @@
|
|||
#include <concepts>
|
||||
#include <random>
|
||||
|
||||
namespace std {
|
||||
#ifdef __clang__
|
||||
template < class T >
|
||||
concept integral = std::is_integral_v<T>;
|
||||
|
||||
template < class T >
|
||||
concept signed_integral = std::integral<T> && std::is_signed_v<T>;
|
||||
|
||||
template < class T >
|
||||
concept unsigned_integral
|
||||
= std::integral<T> && !std::signed_integral<T>;
|
||||
|
||||
template< class F, class... Args >
|
||||
concept invocable
|
||||
= requires(F&& f, Args&&... args) {
|
||||
std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
|
||||
/* not required to be equality-preserving */
|
||||
};
|
||||
|
||||
template< typename G >
|
||||
concept uniform_random_bit_generator
|
||||
= std::invocable<G&>
|
||||
&& std::unsigned_integral<std::invoke_result_t<G&>>
|
||||
&& requires { { G::min() } -> std::same_as<std::invoke_result_t<G&>>;
|
||||
{ G::max() } -> std::same_as<std::invoke_result_t<G&>>;
|
||||
requires std::bool_constant<(G::min() < G::max())>::value; };
|
||||
#else
|
||||
/* uniform_random_bit_generator provided by gcc 12.3.2 */
|
||||
#endif
|
||||
} /*namespace std*/
|
||||
|
||||
namespace xo {
|
||||
namespace rng {
|
||||
/* an engine generates psuedo-random bits.
|
||||
|
|
@ -29,7 +60,13 @@ namespace xo {
|
|||
{ engine.seed(r) };
|
||||
{ engine == engine };
|
||||
{ engine != engine };
|
||||
} && std::copyable<RngEngine> && std::uniform_random_bit_generator<RngEngine>;
|
||||
}
|
||||
#ifdef __clang__
|
||||
// std::copyable apparently not available in clang11 ?
|
||||
#else
|
||||
&& std::copyable<RngEngine>
|
||||
#endif
|
||||
&& std::uniform_random_bit_generator<RngEngine>;
|
||||
} /*namespace rng*/
|
||||
} /*namespace xo*/
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ namespace xo {
|
|||
*/
|
||||
template<typename T>
|
||||
void random_seed(T * p_seed) {
|
||||
# ifdef _BSD_SOURCE
|
||||
# ifdef __clang__
|
||||
/* NOTE: arc4random_buf() works on darwin/nix;
|
||||
* probably need to do something else on intel linux
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue