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'間接來修復它。謝謝你爲我做的一切。 –