Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Cosmetics (sonar).
[simgrid.git] / src / xbt / utils / iter / iterator_wrapping.hpp
index c6d2c95..60c73ea 100644 (file)
@@ -12,8 +12,8 @@
 namespace simgrid::xbt {
 
 template <typename T> struct ref_or_value {
-  using type = std::conditional_t<std::is_lvalue_reference<T>::value,
-                                  std::reference_wrapper<typename std::remove_reference<T>::type>, T>;
+  using type =
+      std::conditional_t<std::is_lvalue_reference_v<T>, std::reference_wrapper<typename std::remove_reference_t<T>>, T>;
 };
 template <typename T> using ref_or_value_t = typename ref_or_value<T>::type;
 
@@ -40,7 +40,6 @@ template <typename T> using ref_or_value_t = typename ref_or_value<T>::type;
 template <typename Iterator, typename... Args> struct iterator_wrapping {
 private:
   std::tuple<ref_or_value_t<Args>...> m_args;
-  iterator_wrapping(Args&&... begin_iteration) : m_args(std::forward<ref_or_value_t<Args>>(begin_iteration)...) {}
 
   template <typename IteratorType, typename... Arguments>
   friend constexpr iterator_wrapping<IteratorType, Arguments...> make_iterator_wrapping(Arguments&&... args);
@@ -49,6 +48,7 @@ private:
   friend constexpr iterator_wrapping<IteratorType, Arguments...> make_iterator_wrapping_explicit(Arguments... args);
 
 public:
+  iterator_wrapping(Args&&... begin_iteration) : m_args(ref_or_value_t<Args>(begin_iteration)...) {}
   iterator_wrapping(const iterator_wrapping&)            = delete;
   iterator_wrapping(iterator_wrapping&&)                 = delete;
   iterator_wrapping& operator=(const iterator_wrapping&) = delete;
@@ -70,7 +70,7 @@ constexpr iterator_wrapping<Iterator, Args...> make_iterator_wrapping(Args&&...
 template <typename Iterator, typename... Args>
 constexpr iterator_wrapping<Iterator, Args...> make_iterator_wrapping_explicit(Args... args)
 {
-  return iterator_wrapping<Iterator, Args...>(std::forward<Args>(args)...);
+  return iterator_wrapping<Iterator, Args...>(args...);
 }
 
 } // namespace simgrid::xbt