diff options
author | Morph <39850852+Morph1984@users.noreply.github.com> | 2022-10-26 00:41:54 -0400 |
---|---|---|
committer | Morph <39850852+Morph1984@users.noreply.github.com> | 2022-10-26 00:41:54 -0400 |
commit | 8b4d5aeb4f01348312ca38555d7951ff54b23fc3 (patch) | |
tree | f8df340674b1480f3e0f53a9d21b7fa6fbb350f3 /src/common/concepts.h | |
parent | d8e3380ea529daf3b57b8bb5a4e97baa69a5dfad (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.h | 16 |
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. |