<div dir="ltr">    Can one of the libc++ experts take a peak at...<br><br><a href="https://llvm.org/bugs/show_bug.cgi?id=23307">https://llvm.org/bugs/show_bug.cgi?id=23307</a><br><br>I am unclear why clang++ with libstdc++ tolerates the following code from rstudio 0.98.1103...<br><br>const char* const MAGIC_GUID = "12861c30b10411e1afa60800200c9a66";<br>const char* const FIGURE_DIR = "figure-compile-notebook-12861c30b";<br><br>bool okToGenerateFile(const FilePath& rmdPath,<br>                      const std::string& extension,<br>                      std::string* pErrMsg)<br>{<br>   FilePath filePath = rmdPath.parent().complete(<br>                                    rmdPath.stem() + extension);<br><br>   if (filePath.exists())<br>   {<br>      boost::shared_ptr<std::istream> pStr;<br>      Error error = filePath.open_r(&pStr);<br>      if (error)<br>      {<br>         *pErrMsg = "Error opening file: " + error.summary();<br>         return false;<br>      }<br><br>      std::string magicGuid(MAGIC_GUID);<br>      std::istreambuf_iterator<char> eod;<br>      if (eod == std::search(std::istreambuf_iterator<char>(*pStr),<br>                             eod,<br>                             magicGuid.begin(),<br>                             magicGuid.end()))<br><br>but clang++ with libc++ errors on the above if statement as...<br><br># clang++ -DBOOST_ASIO_DISABLE_KQUEUE -DBOOST_ENABLE_ASSERT_HANDLER   -DBOOST_SIGNALS_NO_DEPRECATION_WARNING -std=c++11 -stdlib=libc++ -O3 -DNDEBUG -c SessionHTMLPreview.ii<br>In file included from /sw/src/fink.build/rstudio-desktop-0.98.1103-5/rstudio-0.98.1103/src/cpp/session/modules/SessionHTMLPreview.cpp:17:<br>In file included from /sw/src/fink.build/rstudio-desktop-0.98.1103-5/rstudio-0.98.1103/src/cpp/session/modules/SessionHTMLPreview.hpp:25:<br>In file included from /sw/src/fink.build/rstudio-desktop-0.98.1103-5/rstudio-0.98.1103/src/cpp/core/include/core/json/Json.hpp:19:<br>In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:439:<br>/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:1572:12: error: no matching function for call to<br>      '__search'<br>    return std::__1::__search<typename add_lvalue_reference<_BinaryPredicate>::type><br>           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:1586:22: note: in instantiation of function<br>      template specialization 'std::__1::search<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::__wrap_iter<char *>,<br>      std::__1::__equal_to<char, char> >' requested here<br>    return std::__1::search(__first1, __last1, __first2, __last2, __equal_to<__v1, __v2>());<br>                     ^<br>/sw/src/fink.build/rstudio-desktop-0.98.1103-5/rstudio-0.98.1103/src/cpp/session/modules/SessionHTMLPreview.cpp:555:23: note: in instantiation of function template<br>      specialization 'std::__1::search<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::__wrap_iter<char *> >' requested here<br>      if (eod == std::search(std::istreambuf_iterator<char>(*pStr),<br>                      ^<br>/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:1456:1: note: candidate function [with<br>      _BinaryPredicate = std::__1::__equal_to<char, char> &, _RandomAccessIterator1 = std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,<br>      _RandomAccessIterator2 = std::__1::__wrap_iter<char *>] not viable: no known conversion from 'typename std::iterator_traits<istreambuf_iterator<char,<br>      char_traits<char> > >::iterator_category' (aka 'std::__1::input_iterator_tag') to 'std::__1::random_access_iterator_tag' for 6th argument<br>__search(_RandomAccessIterator1 __first1, _RandomAccessIterator1 __last1,<br>^<br>/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:1419:1: note: candidate function [with<br>      _BinaryPredicate = std::__1::__equal_to<char, char> &, _ForwardIterator1 = std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,<br>      _ForwardIterator2 = std::__1::__wrap_iter<char *>] not viable: no known conversion from 'typename std::iterator_traits<istreambuf_iterator<char,<br>      char_traits<char> > >::iterator_category' (aka 'std::__1::input_iterator_tag') to 'std::__1::forward_iterator_tag' for 6th argument<br>__search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,<br>^<br>1 error generated.<div><br></div><div>Is this a valid error or a glitch in clang++/libc++?</div><div>            Jack</div></div>