<div dir="ltr">This caused <a href="https://llvm.org/bugs/show_bug.cgi?id=30642">https://llvm.org/bugs/show_bug.cgi?id=30642</a></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 15, 2016 at 6:27 PM, Eric Fiselier via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ericwf<br>
Date: Thu Sep 15 17:27:07 2016<br>
New Revision: 281673<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=281673&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=281673&view=rev</a><br>
Log:<br>
[libc++] Fix and document visibility attributes for Clang, GCC and Windows.<br>
<br>
Summary:<br>
This patch fixes a number of problems with the visibility macros across GCC (on Unix) and Windows (DLL import/export semantics). All of the visibility macros are now documented under `DesignDocs/VisibilityMacros.<wbr>rst`. Now I'll no longer forget the subtleties of each!<br>
<br>
This patch adds two new visibility macros:<br>
<br>
* `_LIBCPP_ENUM_VIS` for controlling the typeinfo of enum types. Only Clang supports this.<br>
* `_LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS` for redefining visibility on explicit instantiation declarations. Clang and Windows require this.<br>
<br>
After applying this patch GCC only emits one -Wattribute warning opposed to 30+.<br>
<br>
<br>
Reviewers: mclow.lists, EricWF<br>
<br>
Subscribers: beanz, mgorny, cfe-commits<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D24602" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D24602</a><br>
<br>
Added:<br>
    libcxx/trunk/docs/DesignDocs/<wbr>VisibilityMacros.rst<br>
Modified:<br>
    libcxx/trunk/CMakeLists.txt<br>
    libcxx/trunk/docs/index.rst<br>
    libcxx/trunk/include/__config<br>
    libcxx/trunk/include/__locale<br>
    libcxx/trunk/include/__string<br>
    libcxx/trunk/include/<wbr>experimental/filesystem<br>
    libcxx/trunk/include/istream<br>
    libcxx/trunk/include/locale<br>
    libcxx/trunk/include/ostream<br>
    libcxx/trunk/include/streambuf<br>
    libcxx/trunk/include/string<br>
    libcxx/trunk/include/vector<br>
<br>
Modified: libcxx/trunk/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists.txt?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/<wbr>CMakeLists.txt?rev=281673&r1=<wbr>281672&r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/CMakeLists.txt (original)<br>
+++ libcxx/trunk/CMakeLists.txt Thu Sep 15 17:27:07 2016<br>
@@ -342,7 +342,6 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "<br>
         -Wno-covered-switch-default)<br>
 elseif("${CMAKE_CXX_COMPILER_<wbr>ID}" MATCHES "GNU")<br>
     add_compile_flags_if_<wbr>supported(<br>
-        -Wno-attributes # FIXME: Fix -Wattribute warnings.<br>
         -Wno-literal-suffix<br>
         -Wno-c++14-compat)<br>
 endif()<br>
<br>
Added: libcxx/trunk/docs/DesignDocs/<wbr>VisibilityMacros.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/docs/DesignDocs/VisibilityMacros.rst?rev=281673&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/docs/<wbr>DesignDocs/VisibilityMacros.<wbr>rst?rev=281673&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/docs/DesignDocs/<wbr>VisibilityMacros.rst (added)<br>
+++ libcxx/trunk/docs/DesignDocs/<wbr>VisibilityMacros.rst Thu Sep 15 17:27:07 2016<br>
@@ -0,0 +1,85 @@<br>
+========================<br>
+Symbol Visibility Macros<br>
+========================<br>
+<br>
+.. contents::<br>
+   :local:<br>
+<br>
+Overview<br>
+========<br>
+<br>
+Libc++ uses various "visibility" macros in order to provide a stable ABI in<br>
+both the library and the headers. These macros work by changing the<br>
+visibility and inlining characteristics of the symbols they are applied to.<br>
+<br>
+Visibility Macros<br>
+=================<br>
+<br>
+**_LIBCPP_HIDDEN**<br>
+  Mark a symbol as hidden so it will not be exported from shared libraries.<br>
+<br>
+**_LIBCPP_FUNC_VIS**<br>
+  Mark a symbol as being exported by the libc++ library. This attribute must<br>
+  be applied to the declaration of all functions exported by the libc++ dylib.<br>
+<br>
+**_LIBCPP_INLINE_VISIBILITY**<br>
+  Mark a function as hidden and force inlining whenever possible.<br>
+<br>
+**_LIBCPP_ALWAYS_INLINE**<br>
+  A synonym for `_LIBCPP_INLINE_VISIBILITY`<br>
+<br>
+**_LIBCPP_TYPE_VIS**<br>
+  Mark a type's typeinfo and vtable as having default visibility.<br>
+  `_LIBCPP_TYPE_VIS`. This macro has no effect on the visibility of the<br>
+  type's member functions. This attribute cannot be used on class templates.<br>
+<br>
+  **GCC Behavior**: GCC does not support Clang's `type_visibility(...)`<br>
+  attribute. With GCC the `visibility(...)` attribute is used and member<br>
+  functions are affected.<br>
+<br>
+**_LIBCPP_TYPE_VIS_ONLY**<br>
+  The same as `_LIBCPP_TYPE_VIS` except that it may be applied to templates.<br>
+<br>
+  **Windows Behavior**: DLLs do not support dllimport/export on class templates.<br>
+  The macro has an empty definition on this platform.<br>
+<br>
+  Note: This macro should be renamed `_LIBCPP_TEMPLATE_TYPE_VIS`.<br>
+<br>
+**_LIBCPP_ENUM_VIS**<br>
+  Mark the typeinfo of an enum as having default visibility. This attribute<br>
+  should be applied to all enum declarations.<br>
+<br>
+  **Windows Behavior**: DLLs do not support importing or exporting enumeration<br>
+  typeinfo. The macro has an empty definition on this platform.<br>
+<br>
+  **GCC Behavior**: GCC un-hides the typeinfo for enumerations by default, even<br>
+  if `-fvisibility=hidden` is specified. Additionally applying a visibility<br>
+  attribute to an enum class results in a warning. The macro has an empty<br>
+  definition with GCC.<br>
+<br>
+**_LIBCPP_EXTERN_TEMPLATE_<wbr>TYPE_VIS**<br>
+  Mark the member functions, typeinfo, and vtable of the type named in<br>
+  a `_LIBCPP_EXTERN_TEMPLATE` declaration as being exported by the libc++ library.<br>
+  This attribute must be specified on all extern class template declarations.<br>
+<br>
+  This macro is used to override the `_LIBCPP_TYPE_VIS_ONLY` attribute<br>
+  specified on the primary template and to export the member functions produced<br>
+  by the explicit instantiation in the dylib.<br>
+<br>
+  **GCC Behavior**: GCC ignores visibility attributes applied the type in<br>
+  extern template declarations and applying an attribute results in a warning.<br>
+  However since `_LIBCPP_TYPE_VIS_ONLY` is the same as `_LIBCPP_TYPE_VIS` the<br>
+  visibility is already correct. The macro has an empty definition with GCC.<br>
+<br>
+**_LIBCPP_EXCEPTION_ABI**<br>
+  Mark the member functions, typeinfo, and vtable of the type as being exported<br>
+  by the libc++ library. This macro must be applied to all *exception types*.<br>
+  Exception types must be defined directly in namespace `std` and not the<br>
+  versioning namespace.<br>
+<br>
+Links<br>
+=====<br>
+<br>
+* `[cfe-dev] Visibility in libc++ - 1 <<a href="http://lists.llvm.org/pipermail/cfe-dev/2013-July/030610.html" rel="noreferrer" target="_blank">http://lists.llvm.org/<wbr>pipermail/cfe-dev/2013-July/<wbr>030610.html</a>>`_<br>
+* `[cfe-dev] Visibility in libc++ - 2 <<a href="http://lists.llvm.org/pipermail/cfe-dev/2013-August/031195.html" rel="noreferrer" target="_blank">http://lists.llvm.org/<wbr>pipermail/cfe-dev/2013-August/<wbr>031195.html</a>>`_<br>
+* `[libcxx] Visibility fixes for Windows <<a href="http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20130805/085461.html" rel="noreferrer" target="_blank">http://lists.llvm.org/<wbr>pipermail/cfe-commits/Week-of-<wbr>Mon-20130805/085461.html</a>>`_<br>
<br>
Modified: libcxx/trunk/docs/index.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/docs/index.rst?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/docs/<wbr>index.rst?rev=281673&r1=<wbr>281672&r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/docs/index.rst (original)<br>
+++ libcxx/trunk/docs/index.rst Thu Sep 15 17:27:07 2016<br>
@@ -129,6 +129,7 @@ Design Documents<br>
<br>
    DesignDocs/CapturingConfigInfo<br>
    DesignDocs/ABIVersioning<br>
+   DesignDocs/VisibilityMacros<br>
<br>
<br>
 * `<atomic> design <<a href="http://libcxx.llvm.org/atomic_design.html" rel="noreferrer" target="_blank">http://libcxx.llvm.org/<wbr>atomic_design.html</a>>`_<br>
<br>
Modified: libcxx/trunk/include/__config<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/_<wbr>_config?rev=281673&r1=281672&<wbr>r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/__config (original)<br>
+++ libcxx/trunk/include/__config Thu Sep 15 17:27:07 2016<br>
@@ -202,90 +202,6 @@<br>
 #define _LIBCPP_NO_CFI<br>
 #endif<br>
<br>
-#ifdef _WIN32<br>
-<br>
-// only really useful for a DLL<br>
-#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally...<br>
-# ifdef cxx_EXPORTS<br>
-#  define _LIBCPP_HIDDEN<br>
-#  define _LIBCPP_FUNC_VIS __declspec(dllexport)<br>
-#  define _LIBCPP_TYPE_VIS __declspec(dllexport)<br>
-# else<br>
-#  define _LIBCPP_HIDDEN<br>
-#  define _LIBCPP_FUNC_VIS __declspec(dllimport)<br>
-#  define _LIBCPP_TYPE_VIS __declspec(dllimport)<br>
-# endif<br>
-#else<br>
-# define _LIBCPP_HIDDEN<br>
-# define _LIBCPP_FUNC_VIS<br>
-# define _LIBCPP_TYPE_VIS<br>
-#endif<br>
-<br>
-#define _LIBCPP_TYPE_VIS_ONLY<br>
-#define _LIBCPP_FUNC_VIS_ONLY<br>
-<br>
-#ifndef _LIBCPP_INLINE_VISIBILITY<br>
-# ifdef _LIBCPP_MSVC<br>
-#  define _LIBCPP_INLINE_VISIBILITY __forceinline<br>
-# else // MinGW GCC and Clang<br>
-#  define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__))<br>
-# endif<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_EXCEPTION_ABI<br>
-#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_ALWAYS_INLINE<br>
-# ifdef _LIBCPP_MSVC<br>
-#  define _LIBCPP_ALWAYS_INLINE __forceinline<br>
-# endif<br>
-#endif<br>
-<br>
-#endif // _WIN32<br>
-<br>
-#ifndef _LIBCPP_HIDDEN<br>
-#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden")))<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_FUNC_VIS<br>
-#define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default")))<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_TYPE_VIS<br>
-#  if __has_attribute(__type_<wbr>visibility__)<br>
-#    define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("<wbr>default")))<br>
-#  else<br>
-#    define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default")))<br>
-#  endif<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_PREFERRED_OVERLOAD<br>
-#  if __has_attribute(__enable_if__)<br>
-#    define _LIBCPP_PREFERRED_OVERLOAD __attribute__ ((__enable_if__(true, "")))<br>
-#  endif<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_TYPE_VIS_ONLY<br>
-# define _LIBCPP_TYPE_VIS_ONLY _LIBCPP_TYPE_VIS<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_FUNC_VIS_ONLY<br>
-# define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_INLINE_VISIBILITY<br>
-#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__))<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_EXCEPTION_ABI<br>
-#define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default")))<br>
-#endif<br>
-<br>
-#ifndef _LIBCPP_ALWAYS_INLINE<br>
-#define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__visibility__("hidden"), __always_inline__))<br>
-#endif<br>
-<br>
 #if defined(__clang__)<br>
<br>
 // _LIBCPP_ALTERNATE_STRING_<wbr>LAYOUT is an old name for<br>
@@ -581,8 +497,6 @@ using namespace _LIBCPP_NAMESPACE __attr<br>
 #define _ALIGNAS(x) __declspec(align(x))<br>
 #define _LIBCPP_HAS_NO_VARIADICS<br>
<br>
-<br>
-<br>
 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {<br>
 #define _LIBCPP_END_NAMESPACE_STD  }<br>
 #define _VSTD std<br>
@@ -628,6 +542,86 @@ namespace std {<br>
<br>
 #endif // __clang__ || __GNUC__ || _MSC_VER || __IBMCPP__<br>
<br>
+<br>
+#ifdef _WIN32<br>
+// only really useful for a DLL. _LIBCPP_DLL should be a compiler builtin define ideally...<br>
+#if defined(_LIBCPP_DLL) && defined(cxx_EXPORTS)<br>
+# define _LIBCPP_DLL_VIS __declspec(dllexport)<br>
+#elif defined(_LIBCPP_DLL)<br>
+# define _LIBCPP_DLL_VIS __declspec(dllimport)<br>
+#else<br>
+# define _LIBCPP_DLL_VIS<br>
+#endif<br>
+#define _LIBCPP_TYPE_VIS            _LIBCPP_DLL_VIS<br>
+#define _LIBCPP_FUNC_VIS            _LIBCPP_DLL_VIS<br>
+#define _LIBCPP_EXCEPTION_ABI       _LIBCPP_DLL_VIS<br>
+#define _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS _LIBCPP_DLL_VIS<br>
+#define _LIBCPP_HIDDEN<br>
+#define _LIBCPP_TYPE_VIS_ONLY<br>
+#define _LIBCPP_FUNC_VIS_ONLY<br>
+#define _LIBCPP_ENUM_VIS<br>
+#define _LIBCPP_INLINE_VISIBILITY __forceinline<br>
+#define _LIBCPP_ALWAYS_INLINE     __forceinline<br>
+#endif // _WIN32<br>
+<br>
+#ifndef _LIBCPP_HIDDEN<br>
+#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden")))<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_FUNC_VIS<br>
+#define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default")))<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_TYPE_VIS<br>
+#  if __has_attribute(__type_<wbr>visibility__)<br>
+#    define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("<wbr>default")))<br>
+#  else<br>
+#    define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default")))<br>
+#  endif<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_TYPE_VIS_ONLY<br>
+# define _LIBCPP_TYPE_VIS_ONLY _LIBCPP_TYPE_VIS<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_FUNC_VIS_ONLY<br>
+# define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_EXCEPTION_ABI<br>
+#define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default")))<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_ENUM_VIS<br>
+#  if __has_attribute(__type_<wbr>visibility__)<br>
+#    define _LIBCPP_ENUM_VIS __attribute__ ((__type_visibility__("<wbr>default")))<br>
+#  else<br>
+#    define _LIBCPP_ENUM_VIS<br>
+#  endif<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS<br>
+#  if __has_attribute(__type_<wbr>visibility__)<br>
+#    define _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __attribute__ ((__visibility__("default")))<br>
+#  else<br>
+#    define _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS<br>
+#  endif<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_INLINE_VISIBILITY<br>
+#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__))<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_ALWAYS_INLINE<br>
+#define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__visibility__("hidden"), __always_inline__))<br>
+#endif<br>
+<br>
+#ifndef _LIBCPP_PREFERRED_OVERLOAD<br>
+#  if __has_attribute(__enable_if__)<br>
+#    define _LIBCPP_PREFERRED_OVERLOAD __attribute__ ((__enable_if__(true, "")))<br>
+#  endif<br>
+#endif<br>
+<br>
 #ifndef _LIBCPP_HAS_NO_NOEXCEPT<br>
 #  define _NOEXCEPT noexcept<br>
 #  define _NOEXCEPT_(x) noexcept(x)<br>
@@ -716,7 +710,7 @@ template <unsigned> struct __static_asse<br>
     _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \<br>
     };<br>
 #else  // _LIBCPP_HAS_NO_STRONG_ENUMS<br>
-#define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS_ONLY x<br>
+#define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_ENUM_VIS x<br>
 #define _LIBCPP_DECLARE_STRONG_ENUM_<wbr>EPILOG(x)<br>
 #endif  // _LIBCPP_HAS_NO_STRONG_ENUMS<br>
<br>
<br>
Modified: libcxx/trunk/include/__locale<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__locale?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/_<wbr>_locale?rev=281673&r1=281672&<wbr>r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/__locale (original)<br>
+++ libcxx/trunk/include/__locale Thu Sep 15 17:27:07 2016<br>
@@ -269,8 +269,8 @@ collate<_CharT>::do_hash(const char_type<br>
     return static_cast<long>(__h);<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS collate<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS collate<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS collate<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS collate<wchar_t>)<br>
<br>
 // template <class CharT> class collate_byname;<br>
<br>
@@ -1178,10 +1178,10 @@ codecvt_byname<_InternT, _ExternT, _Stat<br>
 {<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS codecvt_byname<char, char, mbstate_t>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS codecvt_byname<wchar_t, char, mbstate_t>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS codecvt_byname<char16_t, char, mbstate_t>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS codecvt_byname<char32_t, char, mbstate_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS codecvt_byname<char, char, mbstate_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS codecvt_byname<wchar_t, char, mbstate_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS codecvt_byname<char16_t, char, mbstate_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS codecvt_byname<char32_t, char, mbstate_t>)<br>
<br>
 _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*);<br>
<br>
<br>
Modified: libcxx/trunk/include/__string<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__string?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/_<wbr>_string?rev=281673&r1=281672&<wbr>r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/__string (original)<br>
+++ libcxx/trunk/include/__string Thu Sep 15 17:27:07 2016<br>
@@ -701,7 +701,8 @@ __str_find_last_not_of(const _CharT *__p<br>
 }<br>
<br>
 template<class _Ptr><br>
-size_t _LIBCPP_INLINE_VISIBILITY __do_string_hash(_Ptr __p, _Ptr __e)<br>
+inline _LIBCPP_INLINE_VISIBILITY<br>
+size_t __do_string_hash(_Ptr __p, _Ptr __e)<br>
 {<br>
     typedef typename iterator_traits<_Ptr>::value_<wbr>type value_type;<br>
     return __murmur2_or_cityhash<size_t>(<wbr>)(__p, (__e-__p)*sizeof(value_type));<br>
<br>
Modified: libcxx/trunk/include/<wbr>experimental/filesystem<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/experimental/filesystem?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/<wbr>experimental/filesystem?rev=<wbr>281673&r1=281672&r2=281673&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/<wbr>experimental/filesystem (original)<br>
+++ libcxx/trunk/include/<wbr>experimental/filesystem Thu Sep 15 17:27:07 2016<br>
@@ -249,7 +249,7 @@ struct _LIBCPP_TYPE_VIS space_info<br>
   uintmax_t available;<br>
 };<br>
<br>
-enum class _LIBCPP_TYPE_VIS file_type : signed char<br>
+enum class _LIBCPP_ENUM_VIS file_type : signed char<br>
 {<br>
     none       = 0,<br>
     not_found  = -1,<br>
@@ -263,7 +263,7 @@ enum class _LIBCPP_TYPE_VIS file_type :<br>
     unknown    = 8<br>
 };<br>
<br>
-enum class _LIBCPP_TYPE_VIS perms : unsigned<br>
+enum class _LIBCPP_ENUM_VIS perms : unsigned<br>
 {<br>
     none         = 0,<br>
<br>
@@ -323,7 +323,7 @@ _LIBCPP_INLINE_VISIBILITY<br>
 inline perms& operator^=(perms& _LHS, perms _RHS)<br>
 { return _LHS = _LHS ^ _RHS; }<br>
<br>
-enum class _LIBCPP_TYPE_VIS copy_options : unsigned short<br>
+enum class _LIBCPP_ENUM_VIS copy_options : unsigned short<br>
 {<br>
     none               = 0,<br>
     skip_existing      = 1,<br>
@@ -367,7 +367,7 @@ inline copy_options& operator^=(copy_opt<br>
 { return _LHS = _LHS ^ _RHS; }<br>
<br>
<br>
-enum class directory_options : unsigned char<br>
+enum class _LIBCPP_ENUM_VIS directory_options : unsigned char<br>
 {<br>
     none                     = 0,<br>
     follow_directory_symlink = 1,<br>
<br>
Modified: libcxx/trunk/include/istream<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/istream?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/<wbr>istream?rev=281673&r1=281672&<wbr>r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/istream (original)<br>
+++ libcxx/trunk/include/istream Thu Sep 15 17:27:07 2016<br>
@@ -1741,9 +1741,9 @@ operator>>(basic_istream<_<wbr>CharT, _Traits<br>
     return __is;<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_istream<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_istream<wchar_t>)<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_iostream<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_istream<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_istream<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_iostream<char>)<br>
<br>
 _LIBCPP_END_NAMESPACE_STD<br>
<br>
<br>
Modified: libcxx/trunk/include/locale<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/locale?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/<wbr>locale?rev=281673&r1=281672&<wbr>r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/locale (original)<br>
+++ libcxx/trunk/include/locale Thu Sep 15 17:27:07 2016<br>
@@ -523,8 +523,8 @@ __num_get<_CharT>::__stage2_<wbr>float_loop(_<br>
     return 0;<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>struct _LIBCPP_TYPE_VIS __num_get<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>struct _LIBCPP_TYPE_VIS __num_get<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>struct _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __num_get<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>struct _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __num_get<wchar_t>)<br>
<br>
 template <class _CharT, class _InputIterator = istreambuf_iterator<_CharT> ><br>
 class _LIBCPP_TYPE_VIS_ONLY num_get<br>
@@ -1042,8 +1042,8 @@ num_get<_CharT, _InputIterator>::do_get(<br>
     return __b;<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS num_get<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS num_get<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS num_get<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS num_get<wchar_t>)<br>
<br>
 struct _LIBCPP_TYPE_VIS __num_put_base<br>
 {<br>
@@ -1192,8 +1192,8 @@ __num_put<_CharT>::__widen_<wbr>and_group_flo<br>
         __op = __ob + (__np - __nb);<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>struct _LIBCPP_TYPE_VIS __num_put<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>struct _LIBCPP_TYPE_VIS __num_put<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>struct _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __num_put<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>struct _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __num_put<wchar_t>)<br>
<br>
 template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> ><br>
 class _LIBCPP_TYPE_VIS_ONLY num_put<br>
@@ -1621,8 +1621,8 @@ num_put<_CharT, _OutputIterator>::do_put<br>
     return __pad_and_output(__s, __o, __op, __oe, __iob, __fl);<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS num_put<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS num_put<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS num_put<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS num_put<wchar_t>)<br>
<br>
 template <class _CharT, class _InputIterator><br>
 _LIBCPP_HIDDEN<br>
@@ -2291,8 +2291,8 @@ time_get<_CharT, _InputIterator>::do_get<br>
     return __b;<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS time_get<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS time_get<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS time_get<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS time_get<wchar_t>)<br>
<br>
 class _LIBCPP_TYPE_VIS __time_get<br>
 {<br>
@@ -2374,8 +2374,8 @@ private:<br>
     virtual const string_type& __X() const      {return this->__X_;}<br>
 };<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS time_get_byname<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS time_get_byname<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS time_get_byname<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS time_get_byname<wchar_t>)<br>
<br>
 class _LIBCPP_TYPE_VIS __time_put<br>
 {<br>
@@ -2487,8 +2487,8 @@ time_put<_CharT, _OutputIterator>::do_pu<br>
     return _VSTD::copy(__nb, __ne, __s);<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS time_put<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS time_put<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS time_put<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS time_put<wchar_t>)<br>
<br>
 template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> ><br>
 class _LIBCPP_TYPE_VIS_ONLY time_put_byname<br>
@@ -2508,8 +2508,8 @@ protected:<br>
     ~time_put_byname() {}<br>
 };<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS time_put_byname<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS time_put_byname<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS time_put_byname<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS time_put_byname<wchar_t>)<br>
<br>
 // money_base<br>
<br>
@@ -2575,10 +2575,10 @@ template <class _CharT, bool _Internatio<br>
 const bool<br>
 moneypunct<_CharT, _International>::intl;<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS moneypunct<char, false>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS moneypunct<char, true>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS moneypunct<wchar_t, false>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS moneypunct<wchar_t, true>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS moneypunct<char, false>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS moneypunct<char, true>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS moneypunct<wchar_t, false>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS moneypunct<wchar_t, true>)<br>
<br>
 // moneypunct_byname<br>
<br>
@@ -2632,10 +2632,10 @@ template<> void moneypunct_byname<char,<br>
 template<> void moneypunct_byname<wchar_t, false>::init(const char*);<br>
 template<> void moneypunct_byname<wchar_t, true>::init(const char*);<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS moneypunct_byname<char, false>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS moneypunct_byname<char, true>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS moneypunct_byname<wchar_t, false>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS moneypunct_byname<wchar_t, true>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS moneypunct_byname<char, false>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS moneypunct_byname<char, true>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS moneypunct_byname<wchar_t, false>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS moneypunct_byname<wchar_t, true>)<br>
<br>
 // money_get<br>
<br>
@@ -2691,8 +2691,8 @@ __money_get<_CharT>::__gather_<wbr>info(bool<br>
     }<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS __money_get<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS __money_get<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __money_get<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __money_get<wchar_t>)<br>
<br>
 template <class _CharT, class _InputIterator = istreambuf_iterator<_CharT> ><br>
 class _LIBCPP_TYPE_VIS_ONLY money_get<br>
@@ -3074,8 +3074,8 @@ money_get<_CharT, _InputIterator>::do_ge<br>
     return __b;<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS money_get<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS money_get<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS money_get<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS money_get<wchar_t>)<br>
<br>
 // money_put<br>
<br>
@@ -3249,8 +3249,8 @@ __money_put<_CharT>::__format(<wbr>char_type*<br>
         __mi = __mb;<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS __money_put<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS __money_put<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __money_put<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __money_put<wchar_t>)<br>
<br>
 template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> ><br>
 class _LIBCPP_TYPE_VIS_ONLY money_put<br>
@@ -3402,8 +3402,8 @@ money_put<_CharT, _OutputIterator>::do_p<br>
     return __pad_and_output(__s, __mb, __mi, __me, __iob, __fl);<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS money_put<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS money_put<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS money_put<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS money_put<wchar_t>)<br>
<br>
 // messages<br>
<br>
@@ -3512,8 +3512,8 @@ messages<_CharT>::do_close(<wbr>catalog __c)<br>
 #endif // _LIBCPP_HAS_CATOPEN<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS messages<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS messages<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS messages<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS messages<wchar_t>)<br>
<br>
 template <class _CharT><br>
 class _LIBCPP_TYPE_VIS_ONLY messages_byname<br>
@@ -3536,8 +3536,8 @@ protected:<br>
     ~messages_byname() {}<br>
 };<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS messages_byname<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_TYPE_VIS messages_byname<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS messages_byname<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE2(<wbr>class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS messages_byname<wchar_t>)<br>
<br>
 template<class _Codecvt, class _Elem = wchar_t,<br>
          class _Wide_alloc = allocator<_Elem>,<br>
<br>
Modified: libcxx/trunk/include/ostream<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/ostream?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/<wbr>ostream?rev=281673&r1=281672&<wbr>r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/ostream (original)<br>
+++ libcxx/trunk/include/ostream Thu Sep 15 17:27:07 2016<br>
@@ -1113,8 +1113,8 @@ operator<<(basic_ostream<_<wbr>CharT, _Traits<br>
                          use_facet<ctype<_CharT> >(__os.getloc()).widen('1'));<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ostream<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ostream<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_ostream<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_ostream<wchar_t>)<br>
<br>
 _LIBCPP_END_NAMESPACE_STD<br>
<br>
<br>
Modified: libcxx/trunk/include/streambuf<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/streambuf?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/<wbr>streambuf?rev=281673&r1=<wbr>281672&r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/streambuf (original)<br>
+++ libcxx/trunk/include/streambuf Thu Sep 15 17:27:07 2016<br>
@@ -574,11 +574,11 @@ basic_streambuf<_CharT, _Traits>::overfl<br>
     return traits_type::eof();<br>
 }<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_streambuf<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_streambuf<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_streambuf<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_streambuf<wchar_t>)<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ios<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ios<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_ios<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_ios<wchar_t>)<br>
<br>
 _LIBCPP_END_NAMESPACE_STD<br>
<br>
<br>
Modified: libcxx/trunk/include/string<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/string?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/<wbr>string?rev=281673&r1=281672&<wbr>r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/string (original)<br>
+++ libcxx/trunk/include/string Thu Sep 15 17:27:07 2016<br>
@@ -574,7 +574,7 @@ __basic_string_common<__b>::__<wbr>throw_out_<br>
 #pragma warning( push )<br>
 #pragma warning( disable: 4231 )<br>
 #endif // _LIBCPP_MSVC<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS __basic_string_common<true>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __basic_string_common<true>)<br>
 #ifdef _LIBCPP_MSVC<br>
 #pragma warning( pop )<br>
 #endif // _LIBCPP_MSVC<br>
@@ -1024,7 +1024,7 @@ public:<br>
     _LIBCPP_INLINE_VISIBILITY<br>
     basic_string& replace(size_type __pos1, size_type __n1, __self_view __sv) { return replace(__pos1, __n1, __sv.data(), __sv.size()); }<br>
     basic_string& replace(size_type __pos1, size_type __n1, const basic_string& __str, size_type __pos2, size_type __n2=npos);<br>
-    _LIBCPP_INLINE_VISIBILITY<br>
+    inline _LIBCPP_INLINE_VISIBILITY<br>
     basic_string& replace(size_type __pos1, size_type __n1, __self_view __sv, size_type __pos2, size_type __n2=npos);<br>
     basic_string& replace(size_type __pos, size_type __n1, const value_type* __s, size_type __n2);<br>
     basic_string& replace(size_type __pos, size_type __n1, const value_type* __s);<br>
@@ -3910,8 +3910,8 @@ inline namespace literals<br>
 }<br>
 #endif<br>
<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_string<char>)<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_string<wchar_t>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_string<char>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS basic_string<wchar_t>)<br>
 _LIBCPP_EXTERN_TEMPLATE(string operator+<char, char_traits<char>, allocator<char> >(char const*, string const&))<br>
<br>
 _LIBCPP_END_NAMESPACE_STD<br>
<br>
Modified: libcxx/trunk/include/vector<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/vector?rev=281673&r1=281672&r2=281673&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/<wbr>vector?rev=281673&r1=281672&<wbr>r2=281673&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/vector (original)<br>
+++ libcxx/trunk/include/vector Thu Sep 15 17:27:07 2016<br>
@@ -312,7 +312,7 @@ __vector_base_common<__b>::__<wbr>throw_out_o<br>
 #pragma warning( push )<br>
 #pragma warning( disable: 4231 )<br>
 #endif // _LIBCPP_MSVC<br>
-_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS __vector_base_common<true>)<br>
+_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_<wbr>VIS __vector_base_common<true>)<br>
 #ifdef _LIBCPP_MSVC<br>
 #pragma warning( pop )<br>
 #endif // _LIBCPP_MSVC<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>