是否可以将概念作为模板参数传递?

McS*_*Sim 7 c++ c++-concepts

是否可以将概念作为模板参数传递?例如:

我想做这样的事情:

template <typename t, typename u> concept range_of =
    range<t> &&
    requires (t a) {
        {*a.begin()} -> std::same_as<u &>;
    };
Run Code Online (Sandbox Code Playgroud)

但我不想给出确切的类型,而是u想给出一个概念:

template <typename t, {{concept u}}> concept constrained_range =
    range<t> &&
    requires (t a) {
        {*a.begin()} -> u;
    };
Run Code Online (Sandbox Code Playgroud)

Jea*_*ier 11

由于我们可以将 lambda 函数作为模板参数传递,因此可能会作弊;毕竟,概念只是从类型域到布尔域的元函数。

这是一个例子:

template<auto F, typename T>
using check = std::conditional_t<
      F.template operator()<T>()
    , std::true_type
    , std::false_type>;

#define CONCEPT(TheConcept) \
  [] <typename T> () consteval { return TheConcept<T>; }

static_assert(check<CONCEPT(std::floating_point), float>::value);
Run Code Online (Sandbox Code Playgroud)

Godbolt 演示:https://gcc.godbolt.org/z/fGf45nqTc