RandomAccessIterator コンセプトを自作して concept_map の練習しました。
#include <iostream> #include <vector> auto concept RandomAccessIteratorEx<typename T> { typename value_type = T::value_type; } // ポインタでも使えるようにする template <class T> concept_map RandomAccessIteratorEx<T*> { typedef T value_type; } template <RandomAccessIteratorEx Iterator> void sort(Iterator first, Iterator last) { } int main() { std::vector<int> v; sort(v.begin(), v.end()); // OK int ar[] = {1, 2, 3}; sort(ar, ar+3); // OK }
とりあえず、 implicit concept と explicit concept というものがたぶんわかりました。
そのうちどっかで書こう。