很容易表达“类型 T 是 E 的容器”之类的东西:
template <class T, class E>
concept bool is_container = requires(T t, E e) {
{ t.push_back(e) } -> void;
};
template <class T, class E> requires is_container<T,E>
void moo()
{
T t; E e;
t.push_back(e);
}
(具体检查的内容并不那么重要)。
现在我需要表达这样一个条件:“对于任何类型的 E,T 都是一个容器”。
template <template<class> class T> requires is_container<T>
void moo()
{
T<int> ti;
ti.push_back(1);
T<std::string> ts;
ts.push_back("abc"s);
}
这种情况下怎么写is_container
?