Work around Clang's incomplete C++20 support for omitting typename

This commit is contained in:
Léo Lam 2021-11-05 13:25:54 +01:00
parent e256261b80
commit 027efc4358
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
4 changed files with 4 additions and 4 deletions

View File

@ -31,7 +31,7 @@ namespace ams::sf {
public: public:
class Object; class Object;
using Allocator = StatelessDummyAllocator; using Allocator = StatelessDummyAllocator;
using StatelessAllocator = typename Policy::StatelessAllocator<Object>; using StatelessAllocator = typename Policy::template StatelessAllocator<Object>;
class Object final : private ::ams::sf::impl::ServiceObjectImplBase2, public Base { class Object final : private ::ams::sf::impl::ServiceObjectImplBase2, public Base {
NON_COPYABLE(Object); NON_COPYABLE(Object);

View File

@ -747,7 +747,7 @@ namespace ams::tipc {
using PortManager = PortManagerImpl; using PortManager = PortManagerImpl;
private: private:
PortManager m_port_manager; PortManager m_port_manager;
PortInfo::Allocator m_port_allocator; typename PortInfo::Allocator m_port_allocator;
public: public:
constexpr ServerManagerImpl() : m_port_manager(), m_port_allocator() { /* ... */ } constexpr ServerManagerImpl() : m_port_manager(), m_port_allocator() { /* ... */ }

View File

@ -295,7 +295,7 @@ namespace ams::util {
private: private:
constexpr explicit ALWAYS_INLINE Iterator(ImplIterator it) : m_impl(it) { /* ... */ } constexpr explicit ALWAYS_INLINE Iterator(ImplIterator it) : m_impl(it) { /* ... */ }
constexpr explicit ALWAYS_INLINE Iterator(ImplIterator::pointer p) : m_impl(p) { /* ... */ } constexpr explicit ALWAYS_INLINE Iterator(typename ImplIterator::pointer p) : m_impl(p) { /* ... */ }
constexpr ALWAYS_INLINE ImplIterator GetImplIterator() const { constexpr ALWAYS_INLINE ImplIterator GetImplIterator() const {
return m_impl; return m_impl;

View File

@ -225,7 +225,7 @@ namespace ams::util {
template<typename T, typename Derived> template<typename T, typename Derived>
class OptionalBaseImpl { class OptionalBaseImpl {
protected: protected:
using StoredType = std::remove_const<T>::type; using StoredType = std::remove_const_t<T>;
template<typename... Args> template<typename... Args>
constexpr void ConstructImpl(Args &&... args) { static_cast<Derived *>(this)->m_payload.Construct(std::forward<Args>(args)...); } constexpr void ConstructImpl(Args &&... args) { static_cast<Derived *>(this)->m_payload.Construct(std::forward<Args>(args)...); }