| 1234567891011121314151617181920212223242526272829303132333435363738 |
- // 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*>;
- };
- // TODO: Replace with std::convertible_to when libc++ implements it.
- template <typename From, typename To>
- concept ConvertibleTo = std::is_convertible_v<From, To>;
- } // namespace Common
|