/// Create a new \a target_distribution_policy representing the given
 /// target
 ///
 /// \param target [in] The target the new instances should represent
 ///
 target_distribution_policy operator()(
     target_type && target, std::size_t num_partitions = 1) const
 {
     std::vector<target_type> targets;
     targets.push_back(std::move(target));
     return target_distribution_policy(std::move(targets), num_partitions);
 }
 /// Create a new \a target_distribution_policy representing the given
 /// set of targets
 ///
 /// \param targets [in] The targets the new instances should represent
 ///
 target_distribution_policy operator()(
     std::vector<cuda::target> && targets,
     std::size_t num_partitions = std::size_t(-1)) const
 {
     if (num_partitions == std::size_t(-1))
         num_partitions = targets.size();
     return target_distribution_policy(std::move(targets), num_partitions);
 }
 /// Create a new \a target_distribution_policy representing the given
 /// set of targets
 ///
 /// \param targets [in] The targets the new instances should represent
 ///
 target_distribution_policy operator()(
     std::vector<target_type> const& targets,
     std::size_t num_partitions = std::size_t(-1)) const
 {
     if (num_partitions == std::size_t(-1))
         num_partitions = targets.size();
     return target_distribution_policy(targets, num_partitions);
 }
 /// Create a new \a target_distribution_policy representing the given
 /// target
 ///
 /// \param target [in] The target the new instances should represent
 ///
 target_distribution_policy operator()(cuda::target const& target,
     std::size_t num_partitions = 1) const
 {
     return target_distribution_policy(target, num_partitions);
 }