<div>Hi,</div><div><br></div><div>The following program cannot be compiled with libc++</div><div><br></div><div>#include <vector></div><div>#include <unordered_map></div><div><br></div><div>typedef std::vector<int*> KernelVector;</div>
<div>typedef std::unordered_map<int*,KernelVector> KernelVectorMap;</div><div><br></div><div>int main()</div><div>{</div><div>  KernelVectorMap::const_iterator kernel;</div><div>  KernelVector::const_iterator subkernel = kernel->second.begin();</div>
<div><br></div><div>  std::distance( kernel->second.begin(), subkernel );</div><div><br></div><div>  return 0;</div><div>}</div><div><br></div><div><div>clang++ -std=c++0x -stdlib=libc++ ./const_iterator.cpp </div><div>
./const_iterator.cpp:12:3: error: no matching function for call to 'distance'</div><div>  std::distance( kernel->second.begin(), subkernel );</div><div>  ^~~~~~~~~~~~~</div><div>/usr/include/c++/v1/iterator:478:1: note: candidate template ignored: deduced conflicting types for parameter</div>
<div>      '_InputIter' ('std::__1::__wrap_iter<int **>' vs. 'std::__1::__wrap_iter<int *const *>')</div><div>distance(_InputIter __first, _InputIter __last)</div><div>^</div><div>1 error generated.</div>
</div><div><br></div><div>or </div><div><br></div><div><div>g++ -std=c++0x -I /usr/include/c++/v1/ ./const_iterator.cpp </div><div>./const_iterator.cpp: In function ‘int main()’:</div><div>./const_iterator.cpp:12:52: error: no matching function for call to ‘distance(std::__1::vector<int*>::iterator, std::__1::vector<int*>::const_iterator&)’</div>
<div>./const_iterator.cpp:12:52: note: candidate is:</div><div>/usr/include/c++/v1/iterator:479:47: note: template<class _InputIter> typename std::__1::iterator_traits::difference_type std::__1::distance(_InputIter, _InputIter)</div>
</div><div><br></div><div>Please note that there's no error produced when libstdc++ used.</div><div>My expectation was that libc++ silently convert iterator to const_iterator if necessary, but I guess I'm wrong.</div>
<div><br></div><div>Any comments will be greatly appreciated.</div><div><br></div><div>Thanks,</div><div><br></div><div>Ryuta</div>