summaryrefslogtreecommitdiff
path: root/src/common/concepts.h
diff options
context:
space:
mode:
authorMorph <39850852+Morph1984@users.noreply.github.com>2022-10-26 00:41:54 -0400
committerMorph <39850852+Morph1984@users.noreply.github.com>2022-10-26 00:41:54 -0400
commit8b4d5aeb4f01348312ca38555d7951ff54b23fc3 (patch)
treef8df340674b1480f3e0f53a9d21b7fa6fbb350f3 /src/common/concepts.h
parentd8e3380ea529daf3b57b8bb5a4e97baa69a5dfad (diff)
concepts: Use the std::contiguous_iterator concept
This also covers std::span, which does not have a const iterator. Also renames IsSTLContainer to IsContiguousContainer to explicitly convey its semantics.
Diffstat (limited to 'src/common/concepts.h')
-rw-r--r--src/common/concepts.h16
1 files changed, 3 insertions, 13 deletions
diff --git a/src/common/concepts.h b/src/common/concepts.h
index e8ce30dfe..a9acff3e7 100644
--- a/src/common/concepts.h
+++ b/src/common/concepts.h
@@ -3,24 +3,14 @@
#pragma once
+#include <iterator>
#include <type_traits>
namespace Common {
-// Check if type is like an STL container
+// Check if type satisfies the ContiguousContainer named requirement.
template <typename T>
-concept IsSTLContainer = requires(T t) {
- typename T::value_type;
- typename T::iterator;
- typename T::const_iterator;
- // TODO(ogniK): Replace below is std::same_as<void> when MSVC supports it.
- t.begin();
- t.end();
- t.cbegin();
- t.cend();
- t.data();
- t.size();
-};
+concept IsContiguousContainer = std::contiguous_iterator<typename T::iterator>;
// TODO: Replace with std::derived_from when the <concepts> header
// is available on all supported platforms.