如何使用模板类型声明概念函数签名?

How to declare concept function signature with a template type?

有没有办法让概念函数签名具有模板参数?

像这样:

template<typename SomeTypeT, typename U>
concept SomeType = requires(SomeTypeT s) {
    { s.SomeFunction<U>() };
};

?

显示的概念定义有效,只是您需要告诉编译器 SomeFunction 是一个模板:

template<typename SomeTypeT, typename U>
concept SomeType = requires(SomeTypeT s) {
    { s.template SomeFunction<U>() };
};

如果你想在模板定义中引用依赖名称的模板成员,而不是特定于概念,这总是必要的。解析定义时,编译器还不知道 s 是什么类型,因此无法知道 SomeFunction 应该是一个模板。但它需要知道,因为尖括号和整个表达式的含义可以依赖于它。