04 September 2023

C++ 核心指南目录

“Differentiate a refined concept from its more general case by adding new use patterns.”

理由

不然的话,编译器无法自动区分。

例子

template<typename I>
// Note: input_iterator is defined in <iterator>
concept Input_iter = requires(I iter) { ++iter; };

template<typename I>
// Note: forward_iterator is defined in <iterator>
concept Fwd_iter = Input_iter<I> && requires(I iter) { iter++; };

编译器编译器可以根据新的操作符要求确定概念的细化定义。这样可以减少实现这些类型的人的额外工作,去声明新的类型。如果两个概念的要求是一样的,那么他们在逻辑上是等价的(并非细化)。

强化

  • 标记两个完全相同规定的概念。从而消除歧义。