限制范围或类似概念以仅接受给定类型

Restricting a range or similar concept to only accept a given type

我想声明一个类似于以下的函数:

string concat(const range<string> auto& strings);

我通过以下方式实现了同样的效果:

template <template <typename> typename T> requires range<T<string>>
string concat(const T<string>& strings);

但这太冗长和重复了,我不考虑使用。

有没有更简洁的方法?

我假设没有,因为类型概念要求第一个模板参数是常规类型名,这使得给它一个模板参数列表是不可能的。

如果确实不可能,是否有计划来弥补这个明显的缺陷?如果不是,是否有任何理由证明这可能会给 specify/implement 带来麻烦?

可能是这样的:

template <class R, class T>
concept range_of = std::ranges::range<R> &&
                   std::same_as<std::ranges::range_value_t<R>, T>;
            
static_assert(range_of<std::vector<int>, int>);

static_assert(range_of<decltype(std::declval<std::vector<int>&>() |
                                std::views::all),
                       int>);