这是我尝试测试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的引用实现。

10-07 15:36