common/concepts: Rename IsBaseOf to DerivedFrom

This makes it more inline with its currently unavailable standardized
analogue std::derived_from.

While we're at it, we can also make the template match the requirements
of the standardized variant as well.
master
Lioncash 2020-08-07 07:55:50 +07:00
parent f5d538f118
commit 8e86fa7e60
3 changed files with 8 additions and 6 deletions

@ -23,10 +23,12 @@ concept IsSTLContainer = requires(T t) {
t.size(); t.size();
}; };
// Check if type T is derived from T2 // TODO: Replace with std::derived_from when the <concepts> header
template <typename T, typename T2> // is available on all supported platforms.
concept IsBaseOf = requires { template <typename Derived, typename Base>
std::is_base_of_v<T, T2>; concept DerivedFrom = requires {
std::is_base_of_v<Base, Derived>;
std::is_convertible_v<const volatile Derived*, const volatile Base*>;
}; };
} // namespace Common } // namespace Common

@ -57,7 +57,7 @@ public:
ResultVal<std::shared_ptr<Kernel::ClientPort>> GetServicePort(const std::string& name); ResultVal<std::shared_ptr<Kernel::ClientPort>> GetServicePort(const std::string& name);
ResultVal<std::shared_ptr<Kernel::ClientSession>> ConnectToService(const std::string& name); ResultVal<std::shared_ptr<Kernel::ClientSession>> ConnectToService(const std::string& name);
template <Common::IsBaseOf<Kernel::SessionRequestHandler> T> template <Common::DerivedFrom<Kernel::SessionRequestHandler> T>
std::shared_ptr<T> GetService(const std::string& service_name) const { std::shared_ptr<T> GetService(const std::string& service_name) const {
auto service = registered_services.find(service_name); auto service = registered_services.find(service_name);
if (service == registered_services.end()) { if (service == registered_services.end()) {

@ -25,7 +25,7 @@ namespace Loader {
namespace { namespace {
template <Common::IsBaseOf<AppLoader> T> template <Common::DerivedFrom<AppLoader> T>
std::optional<FileType> IdentifyFileLoader(FileSys::VirtualFile file) { std::optional<FileType> IdentifyFileLoader(FileSys::VirtualFile file) {
const auto file_type = T::IdentifyType(file); const auto file_type = T::IdentifyType(file);
if (file_type != FileType::Error) { if (file_type != FileType::Error) {