这是我尝试测试c++-concepts功能的代码。但是,即使在g++ 6.2.0版本上使用了-fconcepts标志,它似乎也不起作用。
使它正常工作的任何帮助都将非常棒!
#include <iostream>
using namespace std;
#include <list>
#include <vector>
#include <algorithm>
#include <iterator>
#include <bits/stdc++.h>
using namespace std::literals;
template<typename ptr_t >
requires RandomAccessIterator<ptr_t>
void mysort(ptr_t first, ptr_t last)
{
sort(first, last);
}
int main()
{
vector<int> v{22, 11, 55, 33, 44};
list<int> l{22, 11, 55, 33, 44};
mysort(begin(v), end(v));
mysort(begin(l), end(l));
}
这是我的编译方式:
g++-6 concepts.cpp -fconcepts
这是我得到的错误:
error: ‘RandomAccessIterator’ was not declared in this scope
我将拼写更改为
random_access_iterator
,但仍然无法正常工作。6.2.13节中的文档C++ Working Draft定义了RandomAccessIterator的存在。
最佳答案
标准库尚未提供 RandomAccessIterator
。您需要定义它。
relevant documentation on cppreference是入门该概念要求的好地方。
您链接的文档N4620是Ranges 而不是Concepts的工作草案。除非您包含对-fconcepts
友好的范围实现,否则不会为您定义RandomAccessIterator
。
正如Tristan Brindle中提到的his answer一样, cmcstl2
是Ranges TS的引用实现。