<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div><div></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
- It overrides the inliner heuristics, which *should* be smarter.<br class="">
<br class="">
Why can't we get away with just the `inline` keyword and trust the compiler (and/or fix the compiler)?<br class="">
<div class="HOEnZb"><div class="h5"><br class="">
> On Sep 15, 2016, at 17:00, Eric Fiselier via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:<br class="">
><br class="">
> Author: ericwf<br class="">
> Date: Thu Sep 15 19:00:48 2016<br class="">
> New Revision: 281681<br class="">
><br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=281681&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project?rev=281681&view=rev</a><br class="">
> Log:<br class="">
> [libc++] Add _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY to support GCC ABI compatibility<br class="">
><br class="">
> Summary:<br class="">
> GCC and Clang handle visibility attributes on the out-of-line definition of externally instantiated templates differently. For example in the reproducer below Clang will emit both 'foo' and 'bar' with default visibility while GCC only emits a non-hidden 'foo'.<br class="">
><br class="">
> ```<br class="">
> // RUN: g++ -std=c++11 -shared -O3 test.cpp && sym_extract.py a.out<br class="">
> // RUN: clang++ -std=c++11 -shared -O3 test.cpp && sym_extract.py a.out<br class="">
> #define INLINE_VISIBILITY __attribute__((visibility("<wbr class="">hidden"), always_inline))<br class="">
><br class="">
> template <class T><br class="">
> struct Foo {<br class="">
>  void foo();<br class="">
>  void bar();<br class="">
> };<br class="">
><br class="">
> template <class T><br class="">
> void Foo<T>::foo() {}<br class="">
><br class="">
> template <class T><br class="">
> inline INLINE_VISIBILITY<br class="">
> void Foo<T>::bar() {}<br class="">
><br class="">
> template struct Foo<int>;<br class="">
> ```<br class="">
><br class="">
> This difference creates ABI incompatibilities between Clang and GCC built dylibs. Specifically GCC built dylibs lack definitions for various member functions of `basic_string`, `basic_istream`, `basic_ostream`, `basic_iostream`, and `basic_streambuf` (All of these types are externally instantiated).<br class="">
><br class="">
> Surprisingly these missing symbols don't cause many problems because the functions are marked `always_inline`  therefore the dylib definition is rarely needed. However when an out-of-line definition is required then GCC built dylibs will fail to link. For example [GCC built dylibs cannot build Clang](<a href="http://stackoverflow.com/questions/39454262/clang-build-errors" rel="noreferrer" target="_blank" class="">http://stackoverflow.<wbr class="">com/questions/39454262/clang-<wbr class="">build-errors</a>).<br class="">
><br class="">
> This patch works around this issue by adding `_LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY` which is used to mark externally instantiated member functions as always inline. When building the library `_LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY` sets the symbol's visibility to "default" instead of "hidden", otherwise it acts exactly the same as `_LIBCPP_INLINE_VISIBILITY`.<br class="">
><br class="">
> After applying this patch GCC dylibs now contain:<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE7sungetcEv`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE5gbumpEi`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE7sungetcEv`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE9sputbackcEc`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEE3getERNS_<wbr class="">15basic_streambufIwS2_EE`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEElsEPFRNS_<wbr class="">9basic_iosIwS2_EES6_E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE4setpEPcS4_`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEEC1EPNS_<wbr class="">15basic_streambufIwS2_EE`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE6snextcEv`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEE4swapERS3_`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEE4swapERS3_`<br class="">
>  * `_ZNSt3__112basic_stringIcNS_<wbr class="">11char_traitsIcEENS_<wbr class="">9allocatorIcEEE6__initEPKcm`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEErsEPFRNS_<wbr class="">8ios_baseES5_E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE9pubsetbufEPcl`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE10pubseekoffExNS_<wbr class="">8ios_base7seekdirEj`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEErsEPFRNS_<wbr class="">9basic_iosIwS2_EES6_E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE5pbumpEi`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEE5seekpENS_<wbr class="">4fposI11__mbstate_tEE`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_<wbr class="">traitsIcEEE7getlineEPcl`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE5sgetcEv`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEE3getERNS_<wbr class="">15basic_streambufIcS2_EE`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEElsEPFRNS_<wbr class="">8ios_baseES5_E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE8in_availEv`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEErsEPFRNS_<wbr class="">8ios_baseES5_E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE6sbumpcEv`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEElsEPFRNS_<wbr class="">9basic_iosIcS2_EES6_E`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEE3getERc`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE6snextcEv`<br class="">
>  * `_ZNSt3__112basic_stringIwNS_<wbr class="">11char_traitsIwEENS_<wbr class="">9allocatorIwEEE6__initEmw`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_<wbr class="">traitsIwEEE7getlineEPwl`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEE5tellpEv`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEE3getERw`<br class="">
>  * `_ZNSt3__112basic_stringIcNS_<wbr class="">11char_traitsIcEENS_<wbr class="">9allocatorIcEEE6__initEmc`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE7pubsyncEv`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEE3getEPcl`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEEC2EPNS_<wbr class="">15basic_streambufIcS2_EE`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEErsEPFRNS_<wbr class="">9basic_iosIcS2_EES6_E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE7pubsyncEv`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE5sputcEc`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEE5seekpExNS_<wbr class="">8ios_base7seekdirE`<br class="">
>  * `_ZNKSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE6getlocEv`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE5gbumpEi`<br class="">
>  * `_ZNSt3__114basic_<wbr class="">iostreamIcNS_11char_<wbr class="">traitsIcEEE4swapERS3_`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEE5seekpENS_<wbr class="">4fposI11__mbstate_tEE`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEE5tellpEv`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEElsEPFRS3_S4_<wbr class="">E`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEE3getEPwl`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEEC2EPNS_<wbr class="">15basic_streambufIwS2_EE`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEElsEPFRS3_S4_<wbr class="">E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE4setgEPcS4_S4_`<br class="">
>  * `_ZNSt3__112basic_stringIwNS_<wbr class="">11char_traitsIwEENS_<wbr class="">9allocatorIwEEE6__initEPKwmm`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE4setgEPwS4_S4_`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEEC1EPNS_<wbr class="">15basic_streambufIwS2_EE`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE8pubimbueERKNS_<wbr class="">6localeE`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEE4swapERS3_`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEEC2EPNS_<wbr class="">15basic_streambufIwS2_EE`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE10pubseekposENS_<wbr class="">4fposI11__mbstate_tEEj`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE5pbumpEi`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE5sgetcEv`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEE4swapERS3_`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE10pubseekposENS_<wbr class="">4fposI11__mbstate_tEEj`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE5sputnEPKcl`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEE5seekpExNS_<wbr class="">8ios_base7seekdirE`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE5sgetnEPwl`<br class="">
>  * `_ZNSt3__113basic_ostreamIwNS_<wbr class="">11char_traitsIwEEElsEPFRNS_<wbr class="">8ios_baseES5_E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE4setpEPwS4_`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIcNS_11char_<wbr class="">traitsIcEEE5sgetnEPcl`<br class="">
>  * `_ZNKSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE6getlocEv`<br class="">
>  * `_ZNSt3__114basic_<wbr class="">iostreamIcNS_11char_<wbr class="">traitsIcEEEC2EPNS_15basic_<wbr class="">streambufIcS2_EE`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE8pubimbueERKNS_<wbr class="">6localeE`<br class="">
>  * `_ZNSt3__114basic_<wbr class="">iostreamIcNS_11char_<wbr class="">traitsIcEEEC1EPNS_15basic_<wbr class="">streambufIcS2_EE`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE8in_availEv`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEEC1EPNS_<wbr class="">15basic_streambufIcS2_EE`<br class="">
>  * `_ZNSt3__112basic_stringIcNS_<wbr class="">11char_traitsIcEENS_<wbr class="">9allocatorIcEEE6__initEPKcmm`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE6sbumpcEv`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE10pubseekoffExNS_<wbr class="">8ios_base7seekdirEj`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEEC2EPNS_<wbr class="">15basic_streambufIcS2_EE`<br class="">
>  * `_ZNSt3__113basic_istreamIwNS_<wbr class="">11char_traitsIwEEErsEPFRS3_S4_<wbr class="">E`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE9sputbackcEw`<br class="">
>  * `_ZNSt3__112basic_stringIwNS_<wbr class="">11char_traitsIwEENS_<wbr class="">9allocatorIwEEE6__initEPKwm`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE5sputnEPKwl`<br class="">
>  * `_ZNSt3__113basic_istreamIcNS_<wbr class="">11char_traitsIcEEErsEPFRS3_S4_<wbr class="">E`<br class="">
>  * `_ZNSt3__113basic_ostreamIcNS_<wbr class="">11char_traitsIcEEEC1EPNS_<wbr class="">15basic_streambufIcS2_EE`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE9pubsetbufEPwl`<br class="">
>  * `_ZNSt3__115basic_<wbr class="">streambufIwNS_11char_<wbr class="">traitsIwEEE5sputcEw`<br class="">
><br class="">
><br class="">
> This patch has no effect on Clang based builds.<br class="">
><br class="">
><br class="">
><br class="">
> Reviewers: mclow.lists, eugenis, danalbert, jroelofs, EricWF<br class="">
><br class="">
> Subscribers: beanz, cfe-commits, mgorny<br class="">
><br class="">
> Differential Revision: <a href="https://reviews.llvm.org/D24600" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/<wbr class="">D24600</a><br class="">
><br class="">
> Modified:<br class="">
>    libcxx/trunk/CMakeLists.txt<br class="">
>    libcxx/trunk/docs/DesignDocs/<wbr class="">VisibilityMacros.rst<br class="">
>    libcxx/trunk/include/__config<br class="">
>    libcxx/trunk/include/istream<br class="">
>    libcxx/trunk/include/ostream<br class="">
>    libcxx/trunk/include/streambuf<br class="">
>    libcxx/trunk/include/string<br class="">
>    libcxx/trunk/utils/sym_check/<wbr class="">sym_diff.py<br class="">
><br class="">
> Modified: libcxx/trunk/CMakeLists.txt<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists.txt?rev=281681&r1=281680&r2=281681&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/<wbr class="">CMakeLists.txt?rev=281681&r1=<wbr class="">281680&r2=281681&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/CMakeLists.txt (original)<br class="">
> +++ libcxx/trunk/CMakeLists.txt Thu Sep 15 19:00:48 2016<br class="">
> @@ -330,6 +330,8 @@ endif()<br class="">
> # headers<br class="">
> add_compile_flags_if_<wbr class="">supported(-nostdinc++)<br class="">
><br class="">
> +add_definitions(-D_LIBCPP_<wbr class="">BUILDING_LIBRARY)<br class="">
> +<br class="">
> # Warning flags ==============================<wbr class="">==============================<wbr class="">===<br class="">
> add_definitions(-D_LIBCPP_HAS_<wbr class="">NO_PRAGMA_SYSTEM_HEADER)<br class="">
> add_compile_flags_if_<wbr class="">supported(<br class="">
><br class="">
> Modified: libcxx/trunk/docs/DesignDocs/<wbr class="">VisibilityMacros.rst<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/docs/DesignDocs/VisibilityMacros.rst?rev=281681&r1=281680&r2=281681&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/docs/<wbr class="">DesignDocs/VisibilityMacros.<wbr class="">rst?rev=281681&r1=281680&r2=<wbr class="">281681&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/docs/DesignDocs/<wbr class="">VisibilityMacros.rst (original)<br class="">
> +++ libcxx/trunk/docs/DesignDocs/<wbr class="">VisibilityMacros.rst Thu Sep 15 19:00:48 2016<br class="">
> @@ -71,6 +71,16 @@ Visibility Macros<br class="">
>   However since `_LIBCPP_TYPE_VIS_ONLY` is the same as `_LIBCPP_TYPE_VIS` the<br class="">
>   visibility is already correct. The macro has an empty definition with GCC.<br class="">
><br class="">
> +**_LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY**<br class="">
> +  Mark a member function of a class template as hidden and inline except when<br class="">
> +  building the libc++ library where it marks the symbol as being exported by<br class="">
> +  the library.<br class="">
> +<br class="">
> +  This macro is used to maintain ABI compatibility for symbols that have been<br class="">
> +  historically exported by the libc++ library but are now marked inline. It<br class="">
> +  should only be applied to member functions of class templates that are<br class="">
> +  externally instantiated.<br class="">
> +<br class="">
> **_LIBCPP_EXCEPTION_ABI**<br class="">
>   Mark the member functions, typeinfo, and vtable of the type as being exported<br class="">
>   by the libc++ library. This macro must be applied to all *exception types*.<br class="">
><br class="">
> Modified: libcxx/trunk/include/__config<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=281681&r1=281680&r2=281681&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/include/_<wbr class="">_config?rev=281681&r1=281680&<wbr class="">r2=281681&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/include/__config (original)<br class="">
> +++ libcxx/trunk/include/__config Thu Sep 15 19:00:48 2016<br class="">
> @@ -562,6 +562,7 @@ namespace std {<br class="">
> #define _LIBCPP_ENUM_VIS<br class="">
> #define _LIBCPP_INLINE_VISIBILITY __forceinline<br class="">
> #define _LIBCPP_ALWAYS_INLINE     __forceinline<br class="">
> +#define _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY __forceinline<br class="">
> #endif // _WIN32<br class="">
><br class="">
> #ifndef _LIBCPP_HIDDEN<br class="">
> @@ -616,6 +617,14 @@ namespace std {<br class="">
> #define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__visibility__("hidden"), __always_inline__))<br class="">
> #endif<br class="">
><br class="">
> +#ifndef _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +# ifdef _LIBCPP_BUILDING_LIBRARY<br class="">
> +#   define _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY __attribute__((__visibility__(<wbr class="">"default"), __always_inline__))<br class="">
> +# else<br class="">
> +#   define _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY<br class="">
> +# endif<br class="">
> +#endif<br class="">
> +<br class="">
> #ifndef _LIBCPP_PREFERRED_OVERLOAD<br class="">
> #  if __has_attribute(__enable_if__)<br class="">
> #    define _LIBCPP_PREFERRED_OVERLOAD __attribute__ ((__enable_if__(true, "")))<br class="">
><br class="">
> Modified: libcxx/trunk/include/istream<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/istream?rev=281681&r1=281680&r2=281681&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/include/<wbr class="">istream?rev=281681&r1=281680&<wbr class="">r2=281681&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/include/istream (original)<br class="">
> +++ libcxx/trunk/include/istream Thu Sep 15 19:00:48 2016<br class="">
> @@ -184,19 +184,26 @@ public:<br class="">
>     typedef typename traits_type::off_type off_type;<br class="">
><br class="">
>     // 27.7.1.1.1 Constructor/destructor:<br class="">
> -    explicit basic_istream(basic_streambuf<<wbr class="">char_type, traits_type>* __sb);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    explicit basic_istream(basic_streambuf<<wbr class="">char_type, traits_type>* __sb) : __gc_(0)<br class="">
> +    { this->init(__sb); }<br class="">
>     virtual ~basic_istream();<br class="">
> protected:<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
> -    _LIBCPP_INLINE_VISIBILITY<br class="">
> +    inline _LIBCPP_INLINE_VISIBILITY<br class="">
>     basic_istream(basic_istream&& __rhs);<br class="">
> #endif<br class="">
>     // 27.7.1.1.2 Assign/swap:<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
> -    _LIBCPP_INLINE_VISIBILITY<br class="">
> +    inline _LIBCPP_INLINE_VISIBILITY<br class="">
>     basic_istream& operator=(basic_istream&& __rhs);<br class="">
> #endif<br class="">
> -    void swap(basic_istream& __rhs);<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    void swap(basic_istream& __rhs) {<br class="">
> +      _VSTD::swap(__gc_, __rhs.__gc_);<br class="">
> +      basic_ios<char_type, traits_type>::swap(__rhs);<br class="">
> +    }<br class="">
><br class="">
> #if _LIBCPP_STD_VER > 11<br class="">
> #ifndef _LIBCPP_HAS_NO_DELETED_<wbr class="">FUNCTIONS<br class="">
> @@ -213,10 +220,19 @@ public:<br class="">
>     class _LIBCPP_TYPE_VIS_ONLY sentry;<br class="">
><br class="">
>     // 27.7.1.2 Formatted input:<br class="">
> -    basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&));<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&))<br class="">
> +    { return __pf(*this); }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     basic_istream& operator>>(basic_ios<char_<wbr class="">type, traits_type>&<br class="">
> -                              (*__pf)(basic_ios<char_type, traits_type>&));<br class="">
> -    basic_istream& operator>>(ios_base& (*__pf)(ios_base&));<br class="">
> +                              (*__pf)(basic_ios<char_type, traits_type>&))<br class="">
> +    { __pf(*this); return *this; }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_istream& operator>>(ios_base& (*__pf)(ios_base&))<br class="">
> +    { __pf(*this); return *this; }<br class="">
> +<br class="">
>     basic_istream& operator>>(basic_streambuf<<wbr class="">char_type, traits_type>* __sb);<br class="">
>     basic_istream& operator>>(bool& __n);<br class="">
>     basic_istream& operator>>(short& __n);<br class="">
> @@ -236,13 +252,31 @@ public:<br class="">
>     _LIBCPP_INLINE_VISIBILITY<br class="">
>     streamsize gcount() const {return __gc_;}<br class="">
>     int_type get();<br class="">
> -    basic_istream& get(char_type& __c);<br class="">
> -    basic_istream& get(char_type* __s, streamsize __n);<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_istream& get(char_type& __c) {<br class="">
> +      int_type __ch = get();<br class="">
> +      if (__ch != traits_type::eof())<br class="">
> +        __c = traits_type::to_char_type(__<wbr class="">ch);<br class="">
> +      return *this;<br class="">
> +    }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_istream& get(char_type* __s, streamsize __n)<br class="">
> +    { return get(__s, __n, this->widen('\n')); }<br class="">
> +<br class="">
>     basic_istream& get(char_type* __s, streamsize __n, char_type __dlm);<br class="">
> -    basic_istream& get(basic_streambuf<char_type, traits_type>& __sb);<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_istream& get(basic_streambuf<char_type, traits_type>& __sb)<br class="">
> +    { return get(__sb, this->widen('\n')); }<br class="">
> +<br class="">
>     basic_istream& get(basic_streambuf<char_type, traits_type>& __sb, char_type __dlm);<br class="">
><br class="">
> -    basic_istream& getline(char_type* __s, streamsize __n);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_istream& getline(char_type* __s, streamsize __n)<br class="">
> +    { return getline(__s, __n, this->widen('\n')); }<br class="">
> +<br class="">
>     basic_istream& getline(char_type* __s, streamsize __n, char_type __dlm);<br class="">
><br class="">
>     basic_istream& ignore(streamsize __n = 1, int_type __dlm = traits_type::eof());<br class="">
> @@ -303,18 +337,9 @@ basic_istream<_CharT, _Traits>::sentry::<br class="">
>         __is.setstate(ios_base::<wbr class="">failbit);<br class="">
> }<br class="">
><br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_istream<_CharT, _Traits>::basic_istream(basic_<wbr class="">streambuf<char_type, traits_type>* __sb)<br class="">
> -    : __gc_(0)<br class="">
> -{<br class="">
> -    this->init(__sb);<br class="">
> -}<br class="">
> -<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> basic_istream<_CharT, _Traits>::basic_istream(basic_<wbr class="">istream&& __rhs)<br class="">
>     : __gc_(__rhs.__gc_)<br class="">
> {<br class="">
> @@ -323,7 +348,6 @@ basic_istream<_CharT, _Traits>::basic_is<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> basic_istream<_CharT, _Traits>&<br class="">
> basic_istream<_CharT, _Traits>::operator=(basic_<wbr class="">istream&& __rhs)<br class="">
> {<br class="">
> @@ -339,15 +363,6 @@ basic_istream<_CharT, _Traits>::~basic_i<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -void<br class="">
> -basic_istream<_CharT, _Traits>::swap(basic_istream& __rhs)<br class="">
> -{<br class="">
> -    _VSTD::swap(__gc_, __rhs.__gc_);<br class="">
> -    basic_ios<char_type, traits_type>::swap(__rhs);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> basic_istream<_CharT, _Traits>&<br class="">
> basic_istream<_CharT, _Traits>::operator>>(unsigned short& __n)<br class="">
> {<br class="">
> @@ -724,33 +739,6 @@ basic_istream<_CharT, _Traits>::operator<br class="">
>     return *this;<br class="">
> }<br class="">
><br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_istream<_CharT, _Traits>&<br class="">
> -basic_istream<_CharT, _Traits>::operator>>(basic_<wbr class="">istream& (*__pf)(basic_istream&))<br class="">
> -{<br class="">
> -    return __pf(*this);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_istream<_CharT, _Traits>&<br class="">
> -basic_istream<_CharT, _Traits>::operator>>(basic_<wbr class="">ios<char_type, traits_type>&<br class="">
> -                                           (*__pf)(basic_ios<char_type, traits_type>&))<br class="">
> -{<br class="">
> -    __pf(*this);<br class="">
> -    return *this;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_istream<_CharT, _Traits>&<br class="">
> -basic_istream<_CharT, _Traits>::operator>>(ios_base& (*__pf)(ios_base&))<br class="">
> -{<br class="">
> -    __pf(*this);<br class="">
> -    return *this;<br class="">
> -}<br class="">
> -<br class="">
> template<class _CharT, class _Traits><br class="">
> basic_istream<_CharT, _Traits>&<br class="">
> operator>>(basic_istream<_<wbr class="">CharT, _Traits>& __is, _CharT* __s)<br class="">
> @@ -947,17 +935,6 @@ basic_istream<_CharT, _Traits>::get()<br class="">
> }<br class="">
><br class="">
> template<class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_istream<_CharT, _Traits>&<br class="">
> -basic_istream<_CharT, _Traits>::get(char_type& __c)<br class="">
> -{<br class="">
> -    int_type __ch = get();<br class="">
> -    if (__ch != traits_type::eof())<br class="">
> -        __c = traits_type::to_char_type(__<wbr class="">ch);<br class="">
> -    return *this;<br class="">
> -}<br class="">
> -<br class="">
> -template<class _CharT, class _Traits><br class="">
> basic_istream<_CharT, _Traits>&<br class="">
> basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n, char_type __dlm)<br class="">
> {<br class="">
> @@ -1006,14 +983,6 @@ basic_istream<_CharT, _Traits>::get(char<br class="">
> }<br class="">
><br class="">
> template<class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_istream<_CharT, _Traits>&<br class="">
> -basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n)<br class="">
> -{<br class="">
> -    return get(__s, __n, this->widen('\n'));<br class="">
> -}<br class="">
> -<br class="">
> -template<class _CharT, class _Traits><br class="">
> basic_istream<_CharT, _Traits>&<br class="">
> basic_istream<_CharT, _Traits>::get(basic_streambuf<<wbr class="">char_type, traits_type>& __sb,<br class="">
>                                     char_type __dlm)<br class="">
> @@ -1068,14 +1037,6 @@ basic_istream<_CharT, _Traits>::get(basi<br class="">
> }<br class="">
><br class="">
> template<class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_istream<_CharT, _Traits>&<br class="">
> -basic_istream<_CharT, _Traits>::get(basic_streambuf<<wbr class="">char_type, traits_type>& __sb)<br class="">
> -{<br class="">
> -    return get(__sb, this->widen('\n'));<br class="">
> -}<br class="">
> -<br class="">
> -template<class _CharT, class _Traits><br class="">
> basic_istream<_CharT, _Traits>&<br class="">
> basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n, char_type __dlm)<br class="">
> {<br class="">
> @@ -1129,14 +1090,6 @@ basic_istream<_CharT, _Traits>::getline(<br class="">
> }<br class="">
><br class="">
> template<class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_istream<_CharT, _Traits>&<br class="">
> -basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n)<br class="">
> -{<br class="">
> -    return getline(__s, __n, this->widen('\n'));<br class="">
> -}<br class="">
> -<br class="">
> -template<class _CharT, class _Traits><br class="">
> basic_istream<_CharT, _Traits>&<br class="">
> basic_istream<_CharT, _Traits>::ignore(streamsize __n, int_type __dlm)<br class="">
> {<br class="">
> @@ -1503,41 +1456,38 @@ public:<br class="">
>     typedef typename traits_type::off_type off_type;<br class="">
><br class="">
>     // constructor/destructor<br class="">
> -    explicit basic_iostream(basic_<wbr class="">streambuf<char_type, traits_type>* __sb);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    explicit basic_iostream(basic_<wbr class="">streambuf<char_type, traits_type>* __sb)<br class="">
> +      : basic_istream<_CharT, _Traits>(__sb)<br class="">
> +    {}<br class="">
> +<br class="">
>     virtual ~basic_iostream();<br class="">
> protected:<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
> -    _LIBCPP_INLINE_VISIBILITY<br class="">
> +    inline _LIBCPP_INLINE_VISIBILITY<br class="">
>     basic_iostream(basic_iostream&<wbr class="">& __rhs);<br class="">
> #endif<br class="">
><br class="">
>     // assign/swap<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
> -    _LIBCPP_INLINE_VISIBILITY<br class="">
> +    inline _LIBCPP_INLINE_VISIBILITY<br class="">
>     basic_iostream& operator=(basic_iostream&& __rhs);<br class="">
> #endif<br class="">
> -    void swap(basic_iostream& __rhs);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    void swap(basic_iostream& __rhs)<br class="">
> +    { basic_istream<char_type, traits_type>::swap(__rhs); }<br class="">
> public:<br class="">
> };<br class="">
><br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_iostream<_CharT, _Traits>::basic_iostream(<wbr class="">basic_streambuf<char_type, traits_type>* __sb)<br class="">
> -    : basic_istream<_CharT, _Traits>(__sb)<br class="">
> -{<br class="">
> -}<br class="">
> -<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> basic_iostream<_CharT, _Traits>::basic_iostream(<wbr class="">basic_iostream&& __rhs)<br class="">
>     : basic_istream<_CharT, _Traits>(_VSTD::move(__rhs))<br class="">
> {<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> basic_iostream<_CharT, _Traits>&<br class="">
> basic_iostream<_CharT, _Traits>::operator=(basic_<wbr class="">iostream&& __rhs)<br class="">
> {<br class="">
> @@ -1552,14 +1502,6 @@ basic_iostream<_CharT, _Traits>::~basic_<br class="">
> {<br class="">
> }<br class="">
><br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -void<br class="">
> -basic_iostream<_CharT, _Traits>::swap(basic_iostream& __rhs)<br class="">
> -{<br class="">
> -    basic_istream<char_type, traits_type>::swap(__rhs);<br class="">
> -}<br class="">
> -<br class="">
> template<class _CharT, class _Traits, class _Allocator><br class="">
> basic_istream<_CharT, _Traits>&<br class="">
> operator>>(basic_istream<_<wbr class="">CharT, _Traits>& __is,<br class="">
><br class="">
> Modified: libcxx/trunk/include/ostream<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/ostream?rev=281681&r1=281680&r2=281681&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/include/<wbr class="">ostream?rev=281681&r1=281680&<wbr class="">r2=281681&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/include/ostream (original)<br class="">
> +++ libcxx/trunk/include/ostream Thu Sep 15 19:00:48 2016<br class="">
> @@ -160,20 +160,24 @@ public:<br class="">
>     typedef typename traits_type::off_type off_type;<br class="">
><br class="">
>     // 27.7.2.2 Constructor/destructor:<br class="">
> -    explicit basic_ostream(basic_streambuf<<wbr class="">char_type, traits_type>* __sb);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    explicit basic_ostream(basic_streambuf<<wbr class="">char_type, traits_type>* __sb)<br class="">
> +    { this->init(__sb); }<br class="">
>     virtual ~basic_ostream();<br class="">
> protected:<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
> -    _LIBCPP_INLINE_VISIBILITY<br class="">
> +    inline _LIBCPP_INLINE_VISIBILITY<br class="">
>     basic_ostream(basic_ostream&& __rhs);<br class="">
> #endif<br class="">
><br class="">
>     // 27.7.2.3 Assign/swap<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
> -    _LIBCPP_INLINE_VISIBILITY<br class="">
> +    inline _LIBCPP_INLINE_VISIBILITY<br class="">
>     basic_ostream& operator=(basic_ostream&& __rhs);<br class="">
> #endif<br class="">
> -    void swap(basic_ostream& __rhs);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    void swap(basic_ostream& __rhs)<br class="">
> +    { basic_ios<char_type, traits_type>::swap(__rhs); }<br class="">
><br class="">
> #ifndef _LIBCPP_HAS_NO_DELETED_<wbr class="">FUNCTIONS<br class="">
>     basic_ostream           (const basic_ostream& __rhs) = delete;<br class="">
> @@ -188,10 +192,19 @@ public:<br class="">
>     class _LIBCPP_TYPE_VIS_ONLY sentry;<br class="">
><br class="">
>     // 27.7.2.6 Formatted output:<br class="">
> -    basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&));<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&))<br class="">
> +    { return __pf(*this); }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     basic_ostream& operator<<(basic_ios<char_<wbr class="">type, traits_type>&<br class="">
> -                              (*__pf)(basic_ios<char_type,<wbr class="">traits_type>&));<br class="">
> -    basic_ostream& operator<<(ios_base& (*__pf)(ios_base&));<br class="">
> +                              (*__pf)(basic_ios<char_type,<wbr class="">traits_type>&))<br class="">
> +    { __pf(*this); return *this; }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_ostream& operator<<(ios_base& (*__pf)(ios_base&))<br class="">
> +    { __pf(*this); return *this; }<br class="">
> +<br class="">
>     basic_ostream& operator<<(bool __n);<br class="">
>     basic_ostream& operator<<(short __n);<br class="">
>     basic_ostream& operator<<(unsigned short __n);<br class="">
> @@ -213,8 +226,11 @@ public:<br class="">
>     basic_ostream& flush();<br class="">
><br class="">
>     // 27.7.2.5 seeks:<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     pos_type tellp();<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     basic_ostream& seekp(pos_type __pos);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     basic_ostream& seekp(off_type __off, ios_base::seekdir __dir);<br class="">
><br class="">
> protected:<br class="">
> @@ -274,24 +290,15 @@ basic_ostream<_CharT, _Traits>::sentry::<br class="">
>     }<br class="">
> }<br class="">
><br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_ostream<_CharT, _Traits>::basic_ostream(basic_<wbr class="">streambuf<char_type, traits_type>* __sb)<br class="">
> -{<br class="">
> -    this->init(__sb);<br class="">
> -}<br class="">
> -<br class="">
> #ifndef _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> basic_ostream<_CharT, _Traits>::basic_ostream(basic_<wbr class="">ostream&& __rhs)<br class="">
> {<br class="">
>     this->move(__rhs);<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> basic_ostream<_CharT, _Traits>&<br class="">
> basic_ostream<_CharT, _Traits>::operator=(basic_<wbr class="">ostream&& __rhs)<br class="">
> {<br class="">
> @@ -307,41 +314,6 @@ basic_ostream<_CharT, _Traits>::~basic_o<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -void<br class="">
> -basic_ostream<_CharT, _Traits>::swap(basic_ostream& __rhs)<br class="">
> -{<br class="">
> -    basic_ios<char_type, traits_type>::swap(__rhs);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_ostream<_CharT, _Traits>&<br class="">
> -basic_ostream<_CharT, _Traits>::operator<<(basic_<wbr class="">ostream& (*__pf)(basic_ostream&))<br class="">
> -{<br class="">
> -    return __pf(*this);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_ostream<_CharT, _Traits>&<br class="">
> -basic_ostream<_CharT, _Traits>::operator<<(basic_<wbr class="">ios<char_type, traits_type>&<br class="">
> -                                           (*__pf)(basic_ios<char_type,<wbr class="">traits_type>&))<br class="">
> -{<br class="">
> -    __pf(*this);<br class="">
> -    return *this;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_ostream<_CharT, _Traits>&<br class="">
> -basic_ostream<_CharT, _Traits>::operator<<(ios_base& (*__pf)(ios_base&))<br class="">
> -{<br class="">
> -    __pf(*this);<br class="">
> -    return *this;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> basic_ostream<_CharT, _Traits>&<br class="">
> basic_ostream<_CharT, _Traits>::operator<<(basic_<wbr class="">streambuf<char_type, traits_type>* __sb)<br class="">
> {<br class="">
> @@ -989,7 +961,6 @@ basic_ostream<_CharT, _Traits>::flush()<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> typename basic_ostream<_CharT, _Traits>::pos_type<br class="">
> basic_ostream<_CharT, _Traits>::tellp()<br class="">
> {<br class="">
> @@ -999,7 +970,6 @@ basic_ostream<_CharT, _Traits>::tellp()<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> basic_ostream<_CharT, _Traits>&<br class="">
> basic_ostream<_CharT, _Traits>::seekp(pos_type __pos)<br class="">
> {<br class="">
> @@ -1013,7 +983,6 @@ basic_ostream<_CharT, _Traits>::seekp(po<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> basic_ostream<_CharT, _Traits>&<br class="">
> basic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir)<br class="">
> {<br class="">
><br class="">
> Modified: libcxx/trunk/include/streambuf<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/streambuf?rev=281681&r1=281680&r2=281681&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/include/<wbr class="">streambuf?rev=281681&r1=<wbr class="">281680&r2=281681&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/include/streambuf (original)<br class="">
> +++ libcxx/trunk/include/streambuf Thu Sep 15 19:00:48 2016<br class="">
> @@ -132,32 +132,96 @@ public:<br class="">
>     virtual ~basic_streambuf();<br class="">
><br class="">
>     // 27.6.2.2.1 locales:<br class="">
> -    locale pubimbue(const locale& __loc);<br class="">
> -    locale getloc() const;<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    locale pubimbue(const locale& __loc) {<br class="">
> +        imbue(__loc);<br class="">
> +        locale __r = __loc_;<br class="">
> +        __loc_ = __loc;<br class="">
> +        return __r;<br class="">
> +    }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    locale getloc() const { return __loc_; }<br class="">
><br class="">
>     // 27.6.2.2.2 buffer and positioning:<br class="">
> -    basic_streambuf* pubsetbuf(char_type* __s, streamsize __n);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    basic_streambuf* pubsetbuf(char_type* __s, streamsize __n)<br class="">
> +    { return setbuf(__s, __n); }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     pos_type pubseekoff(off_type __off, ios_base::seekdir __way,<br class="">
> -                        ios_base::openmode __which = ios_base::in | ios_base::out);<br class="">
> +                        ios_base::openmode __which = ios_base::in | ios_base::out)<br class="">
> +    { return seekoff(__off, __way, __which); }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     pos_type pubseekpos(pos_type __sp,<br class="">
> -                        ios_base::openmode __which = ios_base::in | ios_base::out);<br class="">
> -    int pubsync();<br class="">
> +                        ios_base::openmode __which = ios_base::in | ios_base::out)<br class="">
> +    { return seekpos(__sp, __which); }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    int pubsync() { return sync(); }<br class="">
><br class="">
>     // Get and put areas:<br class="">
>     // 27.6.2.2.3 Get area:<br class="">
> -    streamsize in_avail();<br class="">
> -    int_type snextc();<br class="">
> -    int_type sbumpc();<br class="">
> -    int_type sgetc();<br class="">
> -    streamsize sgetn(char_type* __s, streamsize __n);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    streamsize in_avail() {<br class="">
> +        if (__ninp_ < __einp_)<br class="">
> +            return static_cast<streamsize>(__<wbr class="">einp_ - __ninp_);<br class="">
> +        return showmanyc();<br class="">
> +    }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    int_type snextc() {<br class="">
> +        if (sbumpc() == traits_type::eof())<br class="">
> +            return traits_type::eof();<br class="">
> +        return sgetc();<br class="">
> +    }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    int_type sbumpc() {<br class="">
> +        if (__ninp_ == __einp_)<br class="">
> +            return uflow();<br class="">
> +        return traits_type::to_int_type(*__<wbr class="">ninp_++);<br class="">
> +    }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    int_type sgetc() {<br class="">
> +        if (__ninp_ == __einp_)<br class="">
> +            return underflow();<br class="">
> +        return traits_type::to_int_type(*__<wbr class="">ninp_);<br class="">
> +    }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    streamsize sgetn(char_type* __s, streamsize __n)<br class="">
> +    { return xsgetn(__s, __n); }<br class="">
><br class="">
>     // 27.6.2.2.4 Putback:<br class="">
> -    int_type sputbackc(char_type __c);<br class="">
> -    int_type sungetc();<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    int_type sputbackc(char_type __c) {<br class="">
> +        if (__binp_ == __ninp_ || !traits_type::eq(__c, __ninp_[-1]))<br class="">
> +            return pbackfail(traits_type::to_int_<wbr class="">type(__c));<br class="">
> +        return traits_type::to_int_type(*--__<wbr class="">ninp_);<br class="">
> +    }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    int_type sungetc() {<br class="">
> +        if (__binp_ == __ninp_)<br class="">
> +          return pbackfail();<br class="">
> +        return traits_type::to_int_type(*--__<wbr class="">ninp_);<br class="">
> +    }<br class="">
><br class="">
>     // 27.6.2.2.5 Put area:<br class="">
> -    int_type sputc(char_type __c);<br class="">
> -    streamsize sputn(const char_type* __s, streamsize __n);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    int_type sputc(char_type __c) {<br class="">
> +        if (__nout_ == __eout_)<br class="">
> +            return overflow(traits_type::to_int_<wbr class="">type(__c));<br class="">
> +        *__nout_++ = __c;<br class="">
> +        return traits_type::to_int_type(__c);<br class="">
> +    }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    streamsize sputn(const char_type* __s, streamsize __n)<br class="">
> +    { return xsputn(__s, __n); }<br class="">
><br class="">
> protected:<br class="">
>     basic_streambuf();<br class="">
> @@ -169,15 +233,30 @@ protected:<br class="">
>     _LIBCPP_ALWAYS_INLINE char_type* eback() const {return __binp_;}<br class="">
>     _LIBCPP_ALWAYS_INLINE char_type* gptr()  const {return __ninp_;}<br class="">
>     _LIBCPP_ALWAYS_INLINE char_type* egptr() const {return __einp_;}<br class="">
> -    void gbump(int __n);<br class="">
> -    void setg(char_type* __gbeg, char_type* __gnext, char_type* __gend);<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    void gbump(int __n) { __ninp_ += __n; }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    void setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) {<br class="">
> +        __binp_ = __gbeg;<br class="">
> +        __ninp_ = __gnext;<br class="">
> +        __einp_ = __gend;<br class="">
> +    }<br class="">
><br class="">
>     // 27.6.2.3.3 Put area:<br class="">
>     _LIBCPP_ALWAYS_INLINE char_type* pbase() const {return __bout_;}<br class="">
>     _LIBCPP_ALWAYS_INLINE char_type* pptr()  const {return __nout_;}<br class="">
>     _LIBCPP_ALWAYS_INLINE char_type* epptr() const {return __eout_;}<br class="">
> -    void pbump(int __n);<br class="">
> -    void setp(char_type* __pbeg, char_type* __pend);<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    void pbump(int __n) { __nout_ += __n; }<br class="">
> +<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
> +    void setp(char_type* __pbeg, char_type* __pend) {<br class="">
> +        __bout_ = __nout_ = __pbeg;<br class="">
> +        __eout_ = __pend;<br class="">
> +    }<br class="">
><br class="">
>     // 27.6.2.4 virtual functions:<br class="">
>     // 27.6.2.4.1 Locales:<br class="">
> @@ -220,147 +299,6 @@ basic_streambuf<_CharT, _Traits>::~basic<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -locale<br class="">
> -basic_streambuf<_CharT, _Traits>::pubimbue(const locale& __loc)<br class="">
> -{<br class="">
> -    imbue(__loc);<br class="">
> -    locale __r = __loc_;<br class="">
> -    __loc_ = __loc;<br class="">
> -    return __r;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -locale<br class="">
> -basic_streambuf<_CharT, _Traits>::getloc() const<br class="">
> -{<br class="">
> -    return __loc_;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -basic_streambuf<_CharT, _Traits>*<br class="">
> -basic_streambuf<_CharT, _Traits>::pubsetbuf(char_type* __s, streamsize __n)<br class="">
> -{<br class="">
> -    return setbuf(__s, __n);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -typename basic_streambuf<_CharT, _Traits>::pos_type<br class="">
> -basic_streambuf<_CharT, _Traits>::pubseekoff(off_type __off,<br class="">
> -                                             ios_base::seekdir __way,<br class="">
> -                                             ios_base::openmode __which)<br class="">
> -{<br class="">
> -    return seekoff(__off, __way, __which);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -typename basic_streambuf<_CharT, _Traits>::pos_type<br class="">
> -basic_streambuf<_CharT, _Traits>::pubseekpos(pos_type __sp,<br class="">
> -                                             ios_base::openmode __which)<br class="">
> -{<br class="">
> -    return seekpos(__sp, __which);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -int<br class="">
> -basic_streambuf<_CharT, _Traits>::pubsync()<br class="">
> -{<br class="">
> -    return sync();<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -streamsize<br class="">
> -basic_streambuf<_CharT, _Traits>::in_avail()<br class="">
> -{<br class="">
> -    if (__ninp_ < __einp_)<br class="">
> -        return static_cast<streamsize>(__<wbr class="">einp_ - __ninp_);<br class="">
> -    return showmanyc();<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -typename basic_streambuf<_CharT, _Traits>::int_type<br class="">
> -basic_streambuf<_CharT, _Traits>::snextc()<br class="">
> -{<br class="">
> -    if (sbumpc() == traits_type::eof())<br class="">
> -        return traits_type::eof();<br class="">
> -    return sgetc();<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -typename basic_streambuf<_CharT, _Traits>::int_type<br class="">
> -basic_streambuf<_CharT, _Traits>::sbumpc()<br class="">
> -{<br class="">
> -    if (__ninp_ == __einp_)<br class="">
> -        return uflow();<br class="">
> -    return traits_type::to_int_type(*__<wbr class="">ninp_++);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -typename basic_streambuf<_CharT, _Traits>::int_type<br class="">
> -basic_streambuf<_CharT, _Traits>::sgetc()<br class="">
> -{<br class="">
> -    if (__ninp_ == __einp_)<br class="">
> -        return underflow();<br class="">
> -    return traits_type::to_int_type(*__<wbr class="">ninp_);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -streamsize<br class="">
> -basic_streambuf<_CharT, _Traits>::sgetn(char_type* __s, streamsize __n)<br class="">
> -{<br class="">
> -    return xsgetn(__s, __n);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -typename basic_streambuf<_CharT, _Traits>::int_type<br class="">
> -basic_streambuf<_CharT, _Traits>::sputbackc(char_type __c)<br class="">
> -{<br class="">
> -    if (__binp_ == __ninp_ || !traits_type::eq(__c, __ninp_[-1]))<br class="">
> -        return pbackfail(traits_type::to_int_<wbr class="">type(__c));<br class="">
> -    return traits_type::to_int_type(*--__<wbr class="">ninp_);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -typename basic_streambuf<_CharT, _Traits>::int_type<br class="">
> -basic_streambuf<_CharT, _Traits>::sungetc()<br class="">
> -{<br class="">
> -    if (__binp_ == __ninp_)<br class="">
> -        return pbackfail();<br class="">
> -    return traits_type::to_int_type(*--__<wbr class="">ninp_);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -typename basic_streambuf<_CharT, _Traits>::int_type<br class="">
> -basic_streambuf<_CharT, _Traits>::sputc(char_type __c)<br class="">
> -{<br class="">
> -    if (__nout_ == __eout_)<br class="">
> -        return overflow(traits_type::to_int_<wbr class="">type(__c));<br class="">
> -    *__nout_++ = __c;<br class="">
> -    return traits_type::to_int_type(__c);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -streamsize<br class="">
> -basic_streambuf<_CharT, _Traits>::sputn(const char_type* __s, streamsize __n)<br class="">
> -{<br class="">
> -    return xsputn(__s, __n);<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> basic_streambuf<_CharT, _Traits>::basic_streambuf()<br class="">
>     : __binp_(0),<br class="">
>       __ninp_(0),<br class="">
> @@ -411,42 +349,6 @@ basic_streambuf<_CharT, _Traits>::swap(b<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -void<br class="">
> -basic_streambuf<_CharT, _Traits>::gbump(int __n)<br class="">
> -{<br class="">
> -    __ninp_ += __n;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -void<br class="">
> -basic_streambuf<_CharT, _Traits>::setg(char_type* __gbeg, char_type* __gnext,<br class="">
> -                                                          char_type* __gend)<br class="">
> -{<br class="">
> -    __binp_ = __gbeg;<br class="">
> -    __ninp_ = __gnext;<br class="">
> -    __einp_ = __gend;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -void<br class="">
> -basic_streambuf<_CharT, _Traits>::pbump(int __n)<br class="">
> -{<br class="">
> -    __nout_ += __n;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -void<br class="">
> -basic_streambuf<_CharT, _Traits>::setp(char_type* __pbeg, char_type* __pend)<br class="">
> -{<br class="">
> -    __bout_ = __nout_ = __pbeg;<br class="">
> -    __eout_ = __pend;<br class="">
> -}<br class="">
> -<br class="">
> -template <class _CharT, class _Traits><br class="">
> void<br class="">
> basic_streambuf<_CharT, _Traits>::imbue(const locale&)<br class="">
> {<br class="">
><br class="">
> Modified: libcxx/trunk/include/string<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/string?rev=281681&r1=281680&r2=281681&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/include/<wbr class="">string?rev=281681&r1=281680&<wbr class="">r2=281681&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/include/string (original)<br class="">
> +++ libcxx/trunk/include/string Thu Sep 15 19:00:48 2016<br class="">
> @@ -1269,11 +1269,15 @@ private:<br class="">
>                  __align_it<sizeof(value_type) < __alignment ?<br class="">
>                             __alignment/sizeof(value_type) : 1 > (__s+1)) - 1;}<br class="">
><br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     void __init(const value_type* __s, size_type __sz, size_type __reserve);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     void __init(const value_type* __s, size_type __sz);<br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     void __init(size_type __n, value_type __c);<br class="">
><br class="">
>     template <class _InputIterator><br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     typename enable_if<br class="">
>     <<br class="">
>         __is_exactly_input_iterator<_<wbr class="">InputIterator>::value,<br class="">
> @@ -1282,6 +1286,7 @@ private:<br class="">
>     __init(_InputIterator __first, _InputIterator __last);<br class="">
><br class="">
>     template <class _ForwardIterator><br class="">
> +    inline _LIBCPP_EXTERN_TEMPLATE_<wbr class="">INLINE_VISIBILITY<br class="">
>     typename enable_if<br class="">
>     <<br class="">
>         __is_forward_iterator<_<wbr class="">ForwardIterator>::value,<br class="">
> @@ -1430,9 +1435,9 @@ basic_string<_CharT, _Traits, _Allocator<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits, class _Allocator><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> -void<br class="">
> -basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_type __sz, size_type __reserve)<br class="">
> +void basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s,<br class="">
> +                                                       size_type __sz,<br class="">
> +                                                       size_type __reserve)<br class="">
> {<br class="">
>     if (__reserve > max_size())<br class="">
>         this->__throw_length_error();<br class="">
> @@ -1455,7 +1460,6 @@ basic_string<_CharT, _Traits, _Allocator<br class="">
> }<br class="">
><br class="">
> template <class _CharT, class _Traits, class _Allocator><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> void<br class="">
> basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_type __sz)<br class="">
> {<br class="">
> @@ -1593,7 +1597,6 @@ basic_string<_CharT, _Traits, _Allocator<br class="">
> #endif  // _LIBCPP_HAS_NO_RVALUE_<wbr class="">REFERENCES<br class="">
><br class="">
> template <class _CharT, class _Traits, class _Allocator><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> void<br class="">
> basic_string<_CharT, _Traits, _Allocator>::__init(size_type __n, value_type __c)<br class="">
> {<br class="">
> @@ -1690,7 +1693,6 @@ basic_string<_CharT, _Traits, _Allocator<br class="">
><br class="">
> template <class _CharT, class _Traits, class _Allocator><br class="">
> template <class _InputIterator><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> typename enable_if<br class="">
> <<br class="">
>     __is_exactly_input_iterator<_<wbr class="">InputIterator>::value,<br class="">
> @@ -1718,7 +1720,6 @@ basic_string<_CharT, _Traits, _Allocator<br class="">
><br class="">
> template <class _CharT, class _Traits, class _Allocator><br class="">
> template <class _ForwardIterator><br class="">
> -inline _LIBCPP_INLINE_VISIBILITY<br class="">
> typename enable_if<br class="">
> <<br class="">
>     __is_forward_iterator<_<wbr class="">ForwardIterator>::value,<br class="">
><br class="">
> Modified: libcxx/trunk/utils/sym_check/<wbr class="">sym_diff.py<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_diff.py?rev=281681&r1=281680&r2=281681&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/utils/<wbr class="">sym_check/sym_diff.py?rev=<wbr class="">281681&r1=281680&r2=281681&<wbr class="">view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/utils/sym_check/<wbr class="">sym_diff.py (original)<br class="">
> +++ libcxx/trunk/utils/sym_check/<wbr class="">sym_diff.py Thu Sep 15 19:00:48 2016<br class="">
> @@ -24,6 +24,10 @@ def main():<br class="">
>         help='Only print symbol names',<br class="">
>         action='store_true', default=False)<br class="">
>     parser.add_argument(<br class="">
> +        '--removed-only', dest='removed_only',<br class="">
> +        help='Only print removed symbols',<br class="">
> +        action='store_true', default=False)<br class="">
> +    parser.add_argument(<br class="">
>         '-o', '--output', dest='output',<br class="">
>         help='The output file. stdout is used if not given',<br class="">
>         type=str, action='store', default=None)<br class="">
> @@ -41,6 +45,8 @@ def main():<br class="">
>     new_syms_list = util.extract_or_load(args.new_<wbr class="">syms)<br class="">
><br class="">
>     added, removed, changed = diff.diff(old_syms_list, new_syms_list)<br class="">
> +    if args.removed_only:<br class="">
> +        added = {}<br class="">
>     report, is_break = diff.report_diff(added, removed, changed,<br class="">
>                                         names_only=args.names_only,<br class="">
>                                         demangle=args.demangle)<br class="">
><br class="">
><br class="">
> ______________________________<wbr class="">_________________<br class="">
> cfe-commits mailing list<br class="">
> <a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class="">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/cfe-commits</a><br class="">
<br class="">
</div></div></blockquote></div><br class=""></div></div>
</div></blockquote></div><br class=""></body></html>