Header file range/v3/action/shuffle.hpp

#include <range/v3/range_fwd.hpp>

#include <range/v3/action/action.hpp>

#include <range/v3/algorithm/shuffle.hpp>

#include <range/v3/utility/functional.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
    {
        namespace action
        {
            struct shuffle_fn
            {
                struct ConceptImpl
                {
                    template <typename Rng, typename Gen, typename I = range_iterator_t<Rng>>
                    decltype(concepts::valid_expr(concepts::model_of<concepts::RandomAccessRange, Rng>(), concepts::is_true(Permutable<I>()), concepts::is_true(UniformRandomNumberGenerator<Gen>()), concepts::is_true(ConvertibleTo<concepts::UniformRandomNumberGenerator::result_t<Gen>, iterator_difference_t<I>>()))) requires_(Rng&&, Gen&&);
                };
                
                template <typename Rng, typename Gen>
                using Concept = concepts::models<ConceptImpl, Rng, Gen>;
                
                template <typename Rng, typename Gen, int _concept_requires_65 = 42, typename std::enable_if<(_concept_requires_65==43)||(Concept<Rng, Gen>()), int>::type=0>
                Rng operator()(Rng&& rng, Gen&& gen) const;
                
                template <typename Rng, typename Gen, int _concept_requires_74 = 42, typename std::enable_if<(_concept_requires_74==43)||(!Concept<Rng, Gen>()), int>::type=0>
                void operator()(Rng&&, Gen&&) const;
            };
            
            inline namespace 
            {
                constexpr auto& shuffle = static_const<action<shuffle_fn>>::value;
            }
        }
    }
}

Variable ranges::v3::action::shuffle

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

action