Header file range/v3/algorithm/shuffle.hpp

#include <range/v3/range_fwd.hpp>

#include <range/v3/begin_end.hpp>

#include <range/v3/range_concepts.hpp>

#include <range/v3/range_traits.hpp>

#include <range/v3/utility/random.hpp>

#include <range/v3/utility/swap.hpp>

#include <range/v3/utility/iterator.hpp>

#include <range/v3/utility/iterator_concepts.hpp>

#include <range/v3/utility/iterator_traits.hpp>

#include <range/v3/utility/static_const.hpp>

namespace ranges
{
    inline namespace v3
    {
        struct shuffle_fn;
        
        inline namespace 
        {
            constexpr auto& shuffle = static_const<with_braced_init_args<shuffle_fn>>::value;
        }
    }
}

Class ranges::v3::shuffle_fn

struct shuffle_fn
{
    template <typename I, typename S, typename Gen = detail::default_random_engine&, int _concept_requires_37 = 42, typename std::enable_if<(_concept_requires_37==43)||(RandomAccessIterator<I>()&&Sentinel<S, I>()&&Permutable<I>()&&UniformRandomNumberGenerator<Gen>()&&ConvertibleTo<concepts::UniformRandomNumberGenerator::result_t<Gen>, iterator_difference_t<I>>()), int>::type=0>
    I operator()(I const begin, S const end, Gen&& gen = detail::get_random_engine()) const;
    
    template <typename Rng, typename Gen = detail::default_random_engine&, typename I = range_iterator_t<Rng>, int _concept_requires_60 = 42, typename std::enable_if<(_concept_requires_60==43)||(RandomAccessRange<Rng>()&&Permutable<I>()&&UniformRandomNumberGenerator<Gen>()&&ConvertibleTo<concepts::UniformRandomNumberGenerator::result_t<Gen>, iterator_difference_t<I>>()), int>::type=0>
    range_safe_iterator_t<Rng> operator()(Rng&& rng, Gen&& rand = detail::get_random_engine()) const;
};

@{


Variable ranges::v3::shuffle

constexpr auto& shuffle = static_const<with_braced_init_args<shuffle_fn>>::value;

shuffle_fn