| 12345678910111213141516171819202122232425262728293031323334 |
- // Copyright 2020 yuzu emulator team
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #pragma once
- #include <type_traits>
- namespace Common {
- // Check if type is like an STL container
- 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();
- };
- // TODO: Replace with std::derived_from when the <concepts> header
- // is available on all supported platforms.
- template <typename Derived, typename Base>
- concept DerivedFrom = requires {
- std::is_base_of_v<Base, Derived>;
- std::is_convertible_v<const volatile Derived*, const volatile Base*>;
- };
- } // namespace Common
|