#include <iostream>#include <concepts>#include <iterator>#include <vector>#include <forward_list>#include <list>template<std::bidirectional_iteratorI>voidf(constchar*name){std::cout<<name<<" is bidirectional_iterator"<<std::endl;}template<typenameI>voidf(constchar*name){std::cout<<name<<" is not bidirectional_iterator"<<std::endl;}structsample_bidirectional_iterator{friendautooperator++(sample_bidirectional_iterator&)->sample_bidirectional_iterator&;friendautooperator++(sample_bidirectional_iterator&,int)->sample_bidirectional_iterator;friendautooperator--(sample_bidirectional_iterator&)->sample_bidirectional_iterator&;friendautooperator--(sample_bidirectional_iterator&,int)->sample_bidirectional_iterator;friendautooperator*(constsample_bidirectional_iterator&)->int&;friendbooloperator==(constsample_bidirectional_iterator&,constsample_bidirectional_iterator&);usingdifference_type=int;usingvalue_type=int;usingiterator_concept=std::bidirectional_iterator_tag;};intmain(){f<int*>("int*");f<constint*>("const int*");f<std::list<int>::iterator>("std::list<int>::iterator");f<std::vector<int>::iterator>("std::vector<int>::iterator");f<sample_bidirectional_iterator>("sample_bidirectional_iterator");std::cout<<"\n";f<int*const>("int* const");f<std::forward_list<int>::iterator>("std::forward_list<int>::iterator");f<std::istream_iterator<double>>("std::istream_iterator<double>");f<std::ostream_iterator<double>>("std::ostream_iterator<double>");}
出力
int* is bidirectional_iterator
const int* is bidirectional_iterator
std::list<int>::iterator is bidirectional_iterator
std::vector<int>::iterator is bidirectional_iterator
sample_bidirectional_iterator is bidirectional_iterator
int* const is not bidirectional_iterator
std::forward_list<int>::iterator is not bidirectional_iterator
std::istream_iterator<double> is not bidirectional_iterator
std::ostream_iterator<double> is not bidirectional_iterator
You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.