Ansicht umschalten
Avatar von pre alpha
  • pre alpha

mehr als 1000 Beiträge seit 13.05.2006

Kleiner Fehler

Hallo Rainer,
bei C++98 (tag dispatching) und C++20 (concepts) fehlt in den Spezialisierungen fĂĽr input_iterator(_tag) die PrĂĽfung auf n>0. Zudem finde ich die C++17-Variante unĂĽbersichtlich (ist natĂĽrlich Geschmackssache); es verwirren auch die PrĂĽfungen
if constexpr (std::is_base_of_v<X, category>).
Das funktioniert zwar, ein
if constexpr (std::is_same_v<X, category>) ist aber klarer.

template <typename It, typename Distance> constexpr void advance_17(It& it, const Distance n) noexcept { using category = typename std::iterator_traits<It>::iterator_category; static_assert(std::is_base_of_v<std::input_iterator_tag, category>); // is iterator ? auto dist = typename std::iterator_traits<It>::difference_type(n); if constexpr (std::is_same_v<std::random_access_iterator_tag, category>) { it += dist; } else if constexpr (std::is_same_v<std::bidirectional_iterator_tag, category>) { if (dist >= 0) { while (dist--) ++it; } else { while (dist++) --it; } } else { while (dist-- > 0) ++it; } }

cu
pre alpha

Das Posting wurde vom Benutzer editiert (04.04.2022 17:43).

Bewerten
- +
Ansicht umschalten