正如安德鲁·萨顿(Andrew Sutton)在许多演讲和论文中所指出的那样,Concepts Lite提案确实具有基于概念的重载功能,并且同时没有概念图的概念,即模板参数完全由概念检查。编译器。鉴于此,目前尚不清楚他们将如何解决Siek和Gregor在2005年的论文“Explicit model definitions are necessary”中描述的问题。简而言之,该问题可以用本文的以下引文说明。
(不过,除了迭代器之外,还有更多示例。)
是的,我知道上面提到的论文考虑了C++ 0x概念,但是问题似乎是概念提案的“通用”问题。
最佳答案
n3351 A Concept Design for the STL中的建议是继续使用迭代器类别标签:
concept InputIterator<WeakInputIterator I> =
EqualityComparable<I> &&
Derived<IteratorCategory<I>, input_iterator_tag>;
在预期包含在每个n4377 C++ Extensions for Concepts标准中的语法中:
template<typename I>
concept bool InputIterator =
WeakInputIterator<I>() && EqualityComparable<I>() &&
Derived<IteratorCategory<I>, input_iterator_tag>();
从前一篇论文:
通常,可以通过检查仅用于断言运行时语义而存在的类型谓词(例如,嵌套类型或常量或类型函数)来表达语义要求。
关于c++ - 他们如何在没有显式模型的情况下避免基于概念的重载问题(又称为概念图),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32067378/