File iwyu_include_picker.patch of Package include-what-you-use

diff --git a/iwyu_include_picker.cc b/iwyu_include_picker.cc
index be318e2..089e911 100644
--- a/iwyu_include_picker.cc
+++ b/iwyu_include_picker.cc
@@ -75,14 +75,14 @@ struct IncludeMapEntry {      // A POD so we can make the input static
 namespace {
 
 // Listed below are all IWYU's native symbol and include mappings,
-// loosely based on GCC 4.4's libc and libstdc++.
+// loosely based on GCC 8's libc and libstdc++.
 
 // Symbol -> include mappings for GNU libc
 const IncludeMapEntry libc_symbol_map[] = {
   // For library symbols that can be defined in more than one header
   // file, maps from symbol-name to legitimate header files.
   // This list was generated via
-  // grep -R '__.*_defined' /usr/include | perl -nle 'm,/usr/include/([^:]*):#\s*\S+ __(.*)_defined, and print qq@    { "$2", kPublic, "<$1>", kPublic },@' | sort -u
+  // grep -R '__.*_defined' /usr/include | perl -nle 'm,/usr/include/([^:]*):#\s*\S+ __(.*)_defined, and print qq@  { "$2", kPublic, "<$1>", kPublic },@' | sort -u
   // I ignored all entries that only appeared once on the list (eg uint32_t).
   // I then added in NULL, which according to [diff.null] C.2.2.3, can
   // be defined in <clocale>, <cstddef>, <cstdio>, <cstdlib>,
@@ -237,11 +237,28 @@ const IncludeMapEntry libstdcpp_symbol_map[] = {
   { "std::char_traits", kPrivate, "<string>", kPublic },
   { "std::char_traits", kPrivate, "<ostream>", kPublic },
   { "std::char_traits", kPrivate, "<istream>", kPublic },
+  // Using pair.
+  { "std::pair", kPrivate, "<map>", kPublic },
+  { "std::pair", kPrivate, "<multimap>", kPublic },
+  { "std::pair", kPrivate, "<utility>", kPublic },
+  // Streams.
+  { "std::istringstream", kPrivate, "<sstream>", kPublic },
+  { "std::ostringstream", kPrivate, "<sstream>", kPublic },
+  { "std::stringstream", kPrivate, "<sstream>", kPublic },
+  { "std::wistringstream", kPrivate, "<sstream>", kPublic },
+  { "std::wostringstream", kPrivate, "<sstream>", kPublic },
+  { "std::wstringstream", kPrivate, "<sstream>", kPublic },
+  { "std::ifstream", kPrivate, "<fstream>", kPublic },
+  { "std::ofstream", kPrivate, "<fstream>", kPublic },
+  { "std::fstream", kPrivate, "<fstream>", kPublic },
+  { "std::wifstream", kPrivate, "<fstream>", kPublic },
+  { "std::wofstream", kPrivate, "<fstream>", kPublic },
+  { "std::wfstream", kPrivate, "<fstream>", kPublic },
 };
 
 // Private -> public include mappings for GNU libc
 const IncludeMapEntry libc_include_map[] = {
-  // ( cd /usr/include && grep '^ *# *include' {sys/,net/,}* | perl -nle 'm/^([^:]+).*<([^>]+)>/ && print qq@    { "<$2>", kPrivate, "<$1>", kPublic },@' | grep bits/ | sort )
+  // ( cd /usr/include && grep '^ *# *include' {sys/,net/,}* | perl -nle 'm/^([^:]+).*<([^>]+)>/ && print qq@  { "<$2>", kPrivate, "<$1>", kPublic },@' | grep bits/ | sort )
   // When I saw more than one mapping for these, I typically picked
   // what I thought was the "best" one.
   { "<bits/a.out.h>", kPrivate, "<a.out.h>", kPublic },
@@ -249,6 +266,7 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/byteswap.h>", kPrivate, "<byteswap.h>", kPublic },
   { "<bits/cmathcalls.h>", kPrivate, "<complex.h>", kPublic },
   { "<bits/confname.h>", kPrivate, "<unistd.h>", kPublic },
+  { "<bits/cpu-set.h>", kPrivate, "<sched.h>", kPublic },
   { "<bits/dirent.h>", kPrivate, "<dirent.h>", kPublic },
   { "<bits/dlfcn.h>", kPrivate, "<dlfcn.h>", kPublic },
   { "<bits/elfclass.h>", kPrivate, "<link.h>", kPublic },
@@ -262,9 +280,18 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/fcntl2.h>", kPrivate, "<fcntl.h>", kPublic },
   { "<bits/fenv.h>", kPrivate, "<fenv.h>", kPublic },
   { "<bits/fenvinline.h>", kPrivate, "<fenv.h>", kPublic },
+  { "<bits/floatn.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/flt-eval-method.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/fp-fast.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/fp-logb.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/getopt_core.h>", kPrivate, "<getopt.h>", kPublic },
+  { "<bits/getopt_ext.h>", kPrivate, "<getopt.h>", kPublic },
+  { "<bits/getopt_posix.h>", kPrivate, "<stdio.h>", kPublic },
+  { "<bits/getopt_posix.h>", kPrivate, "<unistd.h>", kPublic },
   { "<bits/huge_val.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/huge_valf.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/huge_vall.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/huge_val_flt128.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/hwcap.h>", kPrivate, "<sys/auxv.h>", kPublic },
   { "<bits/inf.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/inotify.h>", kPrivate, "<sys/inotify.h>", kPublic },
@@ -272,6 +299,7 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/ioctls.h>", kPrivate, "<sys/ioctl.h>", kPublic },
   { "<bits/ipc.h>", kPrivate, "<sys/ipc.h>", kPublic },
   { "<bits/ipctypes.h>", kPrivate, "<sys/ipc.h>", kPublic },
+  { "<bits/iscanonical.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/libio-ldbl.h>", kPrivate, "<libio.h>", kPublic },
   { "<bits/link.h>", kPrivate, "<link.h>", kPublic },
   { "<bits/locale.h>", kPrivate, "<locale.h>", kPublic },
@@ -305,7 +333,9 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/shm.h>", kPrivate, "<sys/shm.h>", kPublic },
   { "<bits/sigaction.h>", kPrivate, "<signal.h>", kPublic },
   { "<bits/sigcontext.h>", kPrivate, "<signal.h>", kPublic },
+  { "<bits/sigevent-consts.h>", kPrivate, "<signal.h>", kPublic },
   { "<bits/siginfo.h>", kPrivate, "<signal.h>", kPublic },
+  { "<bits/siginfo-consts.h>", kPrivate, "<signal.h>", kPublic },
   { "<bits/signum.h>", kPrivate, "<signal.h>", kPublic },
   { "<bits/sigset.h>", kPrivate, "<signal.h>", kPublic },
   { "<bits/sigstack.h>", kPrivate, "<signal.h>", kPublic },
@@ -314,10 +344,13 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/socket.h>", kPrivate, "<sys/socket.h>", kPublic },
   { "<bits/socket2.h>", kPrivate, "<sys/socket.h>", kPublic },
   { "<bits/socket_type.h>", kPrivate, "<sys/socket.h>", kPublic },
+  { "<bits/ss_flags.h>", kPrivate, "<signal.h>", kPublic },
   { "<bits/stab.def>", kPrivate, "<stab.h>", kPublic },
   { "<bits/stat.h>", kPrivate, "<sys/stat.h>", kPublic },
   { "<bits/statfs.h>", kPrivate, "<sys/statfs.h>", kPublic },
   { "<bits/statvfs.h>", kPrivate, "<sys/statvfs.h>", kPublic },
+  { "<bits/stdint-intn.h>", kPrivate, "<stdint.h>", kPublic },
+  { "<bits/stdint-uintn.h>", kPrivate, "<stdint.h>", kPublic },
   { "<bits/stdio-ldbl.h>", kPrivate, "<stdio.h>", kPublic },
   { "<bits/stdio-lock.h>", kPrivate, "<libio.h>", kPublic },
   { "<bits/stdio.h>", kPrivate, "<stdio.h>", kPublic },
@@ -330,6 +363,8 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/string.h>", kPrivate, "<string.h>", kPublic },
   { "<bits/string2.h>", kPrivate, "<string.h>", kPublic },
   { "<bits/string3.h>", kPrivate, "<string.h>", kPublic },
+  { "<bits/string_fortified.h>", kPrivate, "<string.h>", kPublic },
+  { "<bits/strings_fortified.h>", kPrivate, "<strings.h>", kPublic },
   { "<bits/stropts.h>", kPrivate, "<stropts.h>", kPublic },
   { "<bits/sys_errlist.h>", kPrivate, "<stdio.h>", kPublic },
   { "<bits/syscall.h>", kPrivate, "<sys/syscall.h>", kPrivate },
@@ -342,7 +377,11 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/timerfd.h>", kPrivate, "<sys/timerfd.h>", kPublic },
   { "<bits/timex.h>", kPrivate, "<sys/timex.h>", kPublic },
   { "<bits/types.h>", kPrivate, "<sys/types.h>", kPublic },
+  { "<bits/type_traits.h>", kPrivate, "<pcre_stringpiece.h>", kPublic },
+  { "<bits/uintn-identity.h>", kPrivate, "<endian.h>", kPublic },
   { "<bits/uio.h>", kPrivate, "<sys/uio.h>", kPublic },
+  { "<bits/uio-ext.h>", kPrivate, "<sys/uio.h>", kPublic },
+  { "<bits/uio_lim.h>", kPrivate, "<sys/uio.h>", kPublic },
   { "<bits/unistd.h>", kPrivate, "<unistd.h>", kPublic },
   { "<bits/ustat.h>", kPrivate, "<sys/ustat.h>", kPrivate },
   { "<bits/utmp.h>", kPrivate, "<utmp.h>", kPublic },
@@ -353,6 +392,8 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/wchar-ldbl.h>", kPrivate, "<wchar.h>", kPublic },
   { "<bits/wchar.h>", kPrivate, "<wchar.h>", kPublic },
   { "<bits/wchar2.h>", kPrivate, "<wchar.h>", kPublic },
+  { "<bits/wctype-wchar.h>", kPrivate, "<wchar.h>", kPublic },
+  { "<bits/wctype-wchar.h>", kPrivate, "<wctype.h>", kPublic },
   { "<bits/wordsize.h>", kPrivate, "<limits.h>", kPublic },
   { "<bits/xopen_lim.h>", kPrivate, "<limits.h>", kPublic },
   { "<bits/xtitypes.h>", kPrivate, "<stropts.h>", kPublic },
@@ -360,24 +401,33 @@ const IncludeMapEntry libc_include_map[] = {
   // # error "Never use <bits/dlfcn.h> directly; include <dlfcn.h> instead."
   // or
   // # error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
-  // ( cd /usr/include && grep -R '^ *# *error "Never use\|include' * | perl -nle 'm/<([^>]+).*directly.*<([^>]+)/ && print qq@    { "<$1>", kPrivate, "<$2>", kPublic },@' | sort )
+  // ( cd /usr/include && grep -R '^ *# *error "Never use\|include' * | perl -nle 'm/<([^>]+).*directly.*<([^>]+)/ && print qq@  { "<$1>", kPrivate, "<$2>", kPublic },@' | sort )
   { "<bits/a.out.h>", kPrivate, "<a.out.h>", kPublic },
   { "<bits/byteswap-16.h>", kPrivate, "<byteswap.h>", kPublic },
   { "<bits/byteswap.h>", kPrivate, "<byteswap.h>", kPublic },
   { "<bits/cmathcalls.h>", kPrivate, "<complex.h>", kPublic },
   { "<bits/confname.h>", kPrivate, "<unistd.h>", kPublic },
+  { "<bits/cpu-set.h>", kPrivate, "<sched.h>", kPublic },
   { "<bits/dirent.h>", kPrivate, "<dirent.h>", kPublic },
   { "<bits/dlfcn.h>", kPrivate, "<dlfcn.h>", kPublic },
   { "<bits/elfclass.h>", kPrivate, "<link.h>", kPublic },
   { "<bits/endian.h>", kPrivate, "<endian.h>", kPublic },
   { "<bits/epoll.h>", kPrivate, "<sys/epoll.h>", kPublic },
+  { "<bits/errno.h>", kPrivate, "<errno.h>", kPublic },
+  { "<bits/error.h>", kPrivate, "<error.h>", kPublic },
   { "<bits/eventfd.h>", kPrivate, "<sys/eventfd.h>", kPublic },
   { "<bits/fcntl-linux.h>", kPrivate, "<fcntl.h>", kPublic },
   { "<bits/fcntl.h>", kPrivate, "<fcntl.h>", kPublic },
+  { "<bits/fcntl2.h>", kPrivate, "<fcntl.h>", kPublic },
   { "<bits/fenv.h>", kPrivate, "<fenv.h>", kPublic },
+  { "<bits/flt-eval-method.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/fp-fast.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/fp-logb.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/huge_val.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/huge_valf.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/huge_vall.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/huge_val_flt128.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/hwcap.h>", kPrivate, "<sys/auxv.h>", kPublic },
   { "<bits/in.h>", kPrivate, "<netinet/in.h>", kPublic },
   { "<bits/inf.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/inotify.h>", kPrivate, "<sys/inotify.h>", kPublic },
@@ -385,30 +435,78 @@ const IncludeMapEntry libc_include_map[] = {
   { "<bits/ioctls.h>", kPrivate, "<sys/ioctl.h>", kPublic },
   { "<bits/ipc.h>", kPrivate, "<sys/ipc.h>", kPublic },
   { "<bits/ipctypes.h>", kPrivate, "<sys/ipc.h>", kPublic },
+  { "<bits/iscanonical.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/libio-ldbl.h>", kPrivate, "<libio.h>", kPublic },
+  { "<bits/link.h>", kPrivate, "<link.h>", kPublic },
   { "<bits/locale.h>", kPrivate, "<locale.h>", kPublic },
+  { "<bits/mathcalls.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/math-finite.h>", kPrivate, "<math.h>", kPublic },
-  { "<bits/mathdef.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/mathdef.h>", kPrivate, "<complex.h>", kPublic },
   { "<bits/mathinline.h>", kPrivate, "<math.h>", kPublic },
   { "<bits/mman-linux.h>", kPrivate, "<sys/mman.h>", kPublic },
   { "<bits/mman.h>", kPrivate, "<sys/mman.h>", kPublic },
+  { "<bits/monetary-ldbl.h>", kPrivate, "<monetary.h>", kPublic },
+  { "<bits/mqueue2.h>", kPrivate, "<mqueue.h>", kPublic },
   { "<bits/mqueue.h>", kPrivate, "<mqueue.h>", kPublic },
   { "<bits/msq.h>", kPrivate, "<sys/msg.h>", kPublic },
   { "<bits/nan.h>", kPrivate, "<math.h>", kPublic },
+  { "<bits/netdb.h>", kPrivate, "<netdb.h>", kPublic },
   { "<bits/param.h>", kPrivate, "<sys/param.h>", kPublic },
   { "<bits/poll.h>", kPrivate, "<sys/poll.h>", kPrivate },
-  { "<bits/predefs.h>", kPrivate, "<features.h>", kPublic },
+  { "<bits/poll2.h>", kPrivate, "<sys/poll.h>", kPrivate },
+  { "<bits/printf-ldbl.h>", kPrivate, "<printf.h>", kPublic },
   { "<bits/resource.h>", kPrivate, "<sys/resource.h>", kPublic },
+  { "<bits/sched.h>", kPrivate, "<sched.h>", kPublic },
+  { "<bits/select2.h>", kPrivate, "<sys/select.h>", kPublic },
   { "<bits/select.h>", kPrivate, "<sys/select.h>", kPublic },
   { "<bits/semaphore.h>", kPrivate, "<semaphore.h>", kPublic },
+  { "<bits/sem.h>", kPrivate, "<sys/sem.h>", kPublic },
+  { "<bits/setjmp2.h>", kPrivate, "<setjmp.h>", kPublic },
+  { "<bits/setjmp.h>", kPrivate, "<setjmp.h>", kPublic },
+  { "<bits/shm.h>", kPrivate, "<sys/shm.h>", kPublic },
+  { "<bits/sigaction.h>", kPrivate, "<signal.h>", kPublic },
   { "<bits/sigcontext.h>", kPrivate, "<signal.h>", kPublic },
+  { "<bits/sigevent-consts.h>", kPrivate, "<signal.h>", kPublic },
+  { "<bits/siginfo-consts.h>", kPrivate, "<signal.h>", kPublic },
   { "<bits/signalfd.h>", kPrivate, "<sys/signalfd.h>", kPublic },
+  { "<bits/signum-generic.h>", kPrivate, "<signal.h>", kPublic },
+  { "<bits/signum.h>", kPrivate, "<signal.h>", kPublic },
+  { "<bits/socket2.h>", kPrivate, "<sys/socket.h>", kPublic },
+  { "<bits/socket.h>", kPrivate, "<sys/socket.h>", kPublic },
+  { "<bits/socket_type.h>", kPrivate, "<sys/socket.h>", kPublic },
+  { "<bits/statfs.h>", kPrivate, "<sys/statfs.h>", kPublic },
+  { "<bits/stat.h>", kPrivate, "<sys/stat.h>", kPublic },
+  { "<bits/statvfs.h>", kPrivate, "<sys/statvfs.h>", kPublic },
+  { "<bits/stdio2.h>", kPrivate, "<stdio.h>", kPublic },
+  { "<bits/stdio.h>", kPrivate, "<stdio.h>", kPublic },
+  { "<bits/stdio-ldbl.h>", kPrivate, "<stdio.h>", kPublic },
+  { "<bits/stdio_lim.h>", kPrivate, "<stdio.h>", kPublic },
   { "<bits/stdlib-float.h>", kPrivate, "<stdlib.h>", kPublic },
-  { "<bits/string.h>", kPrivate, "<string.h>", kPublic },
-  { "<bits/string2.h>", kPrivate, "<string.h>", kPublic },
-  { "<bits/string3.h>", kPrivate, "<string.h>", kPublic },
+  { "<bits/stdlib.h>", kPrivate, "<stdlib.h>", kPublic },
+  { "<bits/stdlib-ldbl.h>", kPrivate, "<stdlib.h>", kPublic },
+  { "<bits/string_fortified.h>", kPrivate, "<string.h>", kPublic },
+  { "<bits/stropts.h>", kPrivate, "<stropts.h>", kPublic },
   { "<bits/syscall.h>", kPrivate, "<sys/syscall.h>", kPrivate },
+  { "<bits/sys_errlist.h>", kPrivate, "<stdio.h>", kPublic },
+  { "<bits/syslog.h>", kPrivate, "<sys/syslog.h>", kPrivate },
+  { "<bits/syslog-ldbl.h>", kPrivate, "<sys/syslog.h>", kPrivate },
+  { "<bits/sysmacros.h>", kPrivate, "<sys/sysmacros.h>", kPublic },
+  { "<bits/termios.h>", kPrivate, "<termios.h>", kPublic },
   { "<bits/timerfd.h>", kPrivate, "<sys/timerfd.h>", kPublic },
   { "<bits/typesizes.h>", kPrivate, "<sys/types.h>", kPublic },
+  { "<bits/uintn-identity.h>", kPrivate, "<endian.h>", kPublic },
+  { "<bits/uio-ext.h>", kPrivate, "<sys/uio.h>", kPublic },
+  { "<bits/unistd.h>", kPrivate, "<unistd.h>", kPublic },
+  { "<bits/ustat.h>", kPrivate, "<sys/ustat.h>", kPrivate },
+  { "<bits/utmp.h>", kPrivate, "<utmp.h>", kPublic },
+  { "<bits/utmpx.h>", kPrivate, "<utmpx.h>", kPublic },
+  { "<bits/utsname.h>", kPrivate, "<sys/utsname.h>", kPublic },
+  { "<bits/waitflags.h>", kPrivate, "<sys/wait.h>", kPublic },
+  { "<bits/waitstatus.h>", kPrivate, "<sys/wait.h>", kPublic },
+  { "<bits/wchar2.h>", kPrivate, "<wchar.h>", kPublic },
+  { "<bits/wchar-ldbl.h>", kPrivate, "<wchar.h>", kPublic },
+  { "<bits/wctype-wchar.h>", kPrivate, "<wchar.h>", kPublic },
+  { "<bits/xtitypes.h>", kPrivate, "<stropts.h>", kPublic },
   // Top-level #includes that just forward to another file:
   // $ for i in /usr/include/*; do [ -f $i ] && [ `wc -l < $i` = 1 ] && echo $i; done
   // (poll.h, syscall.h, syslog.h, ustat.h, wait.h).
@@ -794,14 +892,14 @@ const IncludeMapEntry libstdcpp_include_map[] = {
   { "<tr1/hashtable.h>", kPrivate, "<tr1/unordered_map>", kPublic },
   { "<tr1/hashtable.h>", kPrivate, "<tr1/unordered_set>", kPublic },
   // All .tcc files are gcc internal-include files.  We get them from
-  // ( cd /usr/crosstool/v12/gcc-4.3.1-glibc-2.3.6-grte/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/include/c++/4.3.1 && grep -R '^ *# *include.*tcc' * | perl -nle 'm/^([^:]+).*[<"]([^>"]+)[>"]/ && print qq@    { "<$2>", kPrivate, "<$1>", kPublic },@' | sort )
+  // ( cd /usr/include/c++/8 && grep -R '^ *# *include.*tcc' * | perl -nle 'm/^([^:]+).*[<"]([^>"]+)[>"]/ && print qq@  { "<$2>", kPrivate, "<$1>", kPublic },@' | sort )
   // I had to manually edit some of the entries to say the map-to is private.
   { "<bits/cmath.tcc>", kPrivate, "<cmath>", kPublic },
   { "<debug/safe_iterator.tcc>", kPrivate, "<debug/safe_iterator.h>", kPublic },
   { "<tr1_impl/random.tcc>", kPrivate, "<tr1_impl/random>", kPrivate },
   // Some bits->bits #includes: A few files in bits re-export
   // symbols from other files in bits.
-  // ( cd /usr/crosstool/v12/gcc-4.3.1-glibc-2.3.6-grte/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/include/c++/4.3.1 && grep '^ *# *include.*bits/' bits/* | perl -nle 'm/^([^:]+).*<([^>]+)>/ && print qq@  { "<$2>", kPrivate, "<$1>", kPrivate },@' | grep bits/ | sort -u)
+  // ( cd /usr/include/c++/8 && grep '^ *# *include.*bits/' bits/* | perl -nle 'm/^([^:]+).*<([^>]+)>/ && print qq@  { "<$2>", kPrivate, "<$1>", kPrivate },@' | grep bits/ | sort -u)
   // and carefully picked reasonable-looking results (algorithm
   // *uses* pair but doesn't *re-export* pair, for instance).
   { "<bits/c++allocator.h>", kPrivate, "<bits/allocator.h>", kPrivate },
@@ -826,14 +924,19 @@ const IncludeMapEntry libstdcpp_include_map[] = {
   { "<hash_fun.h>", kPrivate, "<hash_set>", kPublic },
   { "<hashtable.h>", kPrivate, "<hash_map>", kPublic },
   { "<hashtable.h>", kPrivate, "<hash_set>", kPublic },
-  // (This one should perhaps be found automatically somehow.)
+  // (These should perhaps be found automatically somehow.)
+  { "<ext/alloc_traits.h>", kPrivate, "<memory>", kPublic },
+  { "<ext/alloc_traits.h>", kPrivate, "<string>", kPublic },
+  { "<ext/alloc_traits.h>", kPrivate, "<vector>", kPublic },
+  { "<ext/alloc_traits.h>", kPrivate, "<map>", kPublic },
+  { "<ext/alloc_traits.h>", kPrivate, "<set>", kPublic },
   { "<ext/sso_string_base.h>", kPrivate, "<string>", kPublic },
   // The iostream .h files are confusing.  Lots of private headers,
   // which are handled above, but we also have public headers
   // #including each other (eg <iostream> #includes <istream>).  We
   // are pretty forgiving: if a user specifies any public header, we
   // generally don't require the others.
-  // ( cd /usr/crosstool/v12/gcc-4.3.1-glibc-2.3.6-grte/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/include/c++/4.3.1 && egrep '^ *# *include <(istream|ostream|iostream|fstream|sstream|streambuf|ios|iosfwd)>' *stream* ios | perl -nle 'm/^([^:]+).*[<"]([^>"]+)[>"]/ and print qq@    { "<$2>", kPublic, "<$1>", kPublic },@' | sort -u )
+  // ( cd /usr/include/c++/8 && egrep '^ *# *include <(istream|ostream|iostream|fstream|sstream|streambuf|ios|iosfwd)>' *stream* ios | perl -nle 'm/^([^:]+).*[<"]([^>"]+)[>"]/ and print qq@  { "<$2>", kPublic, "<$1>", kPublic },@' | sort -u )
   { "<ios>", kPublic, "<istream>", kPublic },
   { "<ios>", kPublic, "<ostream>", kPublic },
   { "<iosfwd>", kPublic, "<ios>", kPublic },
openSUSE Build Service is sponsored by