9
如何编写一个概念来描述基于范围for循环的类型?如何编写简单的范围概念?
一个尝试是:
template < typename Range > concept bool RRange
= requires(Range range) {{std::begin(range),std::end(range)};};
但我真正想要的是一些这样的事:
template < typename Range > concept bool RRange
= requires(Range range) {{for(auto&& item : range);};}; // compile error
就是RRange
是所有类型的概念表达for(auto&& item : range);
是有效的。达到此目的的最佳方法是什么?
我使用GCC7快照与g++ -std=c++1z -fconcepts
。
这是很好的一个警告补充说,由于该规范是怎么写的,用户代码只能让在概念ifying尽力尝试这种语言功能(虽然非常好)。有(非常)病理边缘病例不能被发现。 –
@LucDanton我已经重写了这个概念,以便对命名变量进行操作,正如range-for语义所要求的那样。但是,增加的测试用例失败了,我不知道为什么。这可能是一个边缘案例,就像你之前提到的那样? –
我不应该用以前的解决方案跳过测试新的测试用例。我已经通过添加的'declref'间接来修复它。谢谢你为我做的一切。 –