Modernize the way we compute memory domains from type
Use a constexpr function instead of a template type
This commit is contained in:
parent
ca38e10314
commit
6e389512f5
|
@ -6,6 +6,7 @@
|
|||
#include <utility>
|
||||
|
||||
#include "assert.hh"
|
||||
#include "meta.hh"
|
||||
|
||||
namespace Kakoune
|
||||
{
|
||||
|
@ -141,14 +142,11 @@ bool operator!=(const Allocator<T1, d1>& lhs, const Allocator<T2, d2>& rhs)
|
|||
return d1 != d2;
|
||||
}
|
||||
|
||||
|
||||
constexpr MemoryDomain memory_domain(Meta::AnyType) { return MemoryDomain::Undefined; }
|
||||
|
||||
template<typename T>
|
||||
struct TypeDomain
|
||||
{
|
||||
static constexpr MemoryDomain domain() { return TypeDomain<T>::helper((T*)nullptr); }
|
||||
private:
|
||||
template<typename U> static decltype(U::Domain) constexpr helper(U*) { return U::Domain; }
|
||||
static constexpr MemoryDomain helper(...) { return MemoryDomain::Undefined; }
|
||||
};
|
||||
constexpr decltype(T::Domain) memory_domain(Meta::Type<T>) { return T::Domain; }
|
||||
|
||||
template<MemoryDomain d>
|
||||
struct UseMemoryDomain
|
||||
|
|
|
@ -6,7 +6,8 @@ namespace Kakoune
|
|||
inline namespace Meta
|
||||
{
|
||||
|
||||
template<typename T> struct Type {};
|
||||
struct AnyType{};
|
||||
template<typename T> struct Type : AnyType {};
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
namespace Kakoune
|
||||
{
|
||||
|
||||
template<typename T, MemoryDomain domain = TypeDomain<T>::domain()>
|
||||
template<typename T, MemoryDomain domain = memory_domain(Meta::Type<T>{})>
|
||||
using Vector = std::vector<T, Allocator<T, domain>>;
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user