【发布时间】:2020-11-18 16:06:12
【问题描述】:
目前,我已经使用 C++20 constraints and concepts 实现了 Allocator 概念(指的是Boost proposal):
#include <concepts>
#include <iterator>
template <class A>
concept allocator =
std::copy_constructible<A> &&
std::equality_comparable<A> &&
requires(A a) {
{ a.allocate(0) } -> std::regular;
{ a.allocate(0) } -> std::constructible_from<std::nullptr_t>;
{ a.allocate(0) } -> std::equality_comparable_with<std::nullptr_t>;
{ a.allocate(0) } -> std::random_access_iterator;
{ *a.allocate(0) } -> std::same_as<typename A::value_type&>;
};
您可以看到同一个allocate 函数有多个return-type-requirement。有没有办法将它们组合成一个 return-type-requirement,如下所示?
{ a.allocate(0) } -> std::regular &&
std::constructible_from<std::nullptr_t> &&
std::equality_comparable_with<std::nullptr_t> &&
std::random_access_iterator;
【问题讨论】:
标签: c++ c++20 c++-concepts