remove template parameter from Counter

This commit is contained in:
Eric Mertens
2023-12-05 14:51:24 -08:00
parent ab86531dc5
commit 4073ac22fc
2 changed files with 9 additions and 9 deletions

View File

@@ -3,20 +3,20 @@
#include <cstdint>
#include <iterator>
template <typename T>
/// @brief Output iterator that only counts the number of outputs.
struct Counter
{
using difference_type = std::ptrdiff_t;
struct EmptyRef {
auto operator=(T const&) const -> void {}
auto operator=(T && ) const -> void {}
template <typename T>
auto operator=(T&&) const -> void {}
};
std::size_t n;
std::size_t n = 0;
Counter() : n{0} {}
Counter(std::size_t n) : n{n} {}
Counter() = default;
constexpr Counter(std::size_t n) : n{n} {}
// prefix increment
auto operator++() -> Counter&
@@ -38,7 +38,7 @@ struct Counter
auto operator-(Counter rhs) const -> difference_type
{
return difference_type{n} - difference_type{rhs};
return static_cast<difference_type>(n) - static_cast<difference_type>(rhs);
}
operator std::size_t() const
@@ -47,4 +47,4 @@ struct Counter
}
};
static_assert(std::output_iterator<Counter<int>, int>);
static_assert(std::output_iterator<Counter, int>);