return out = static_cast<T>(state);
}
+ /// special case for randrom(boolean), since static_cast<bool>(0b10) == true
+ bool operator ()(bool &out) noexcept {
+ return out = operator ()();
+ }
+
template<class T>
T Next() noexcept {
T next;
template<class Container>
typename Container::reference From(Container &c) {
+ assert(c.size() > 0);
return c[Next<typename Container::size_type>() % c.size()];
}
template<class Container>
typename Container::const_reference From(const Container &c) {
+ assert(c.size() > 0);
return c[Next<typename Container::size_type>() % c.size()];
}