diff --git a/include/iosfwd b/include/iosfwd
index a4d3f38b..f9ca1a6a 100644
--- a/include/iosfwd
+++ b/include/iosfwd
@@ -92,8 +92,8 @@ typedef fpos<char_traits<wchar_t>::state_type> wstreampos;
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-template<class _CharT>  struct char_traits;
-template<class _Tp>     class allocator;
+template<class _CharT>  struct _LIBCPP_VISIBLE char_traits;
+template<class _Tp>     class _LIBCPP_VISIBLE allocator;
 
 template <class _CharT, class _Traits = char_traits<_CharT> > class basic_ios;
 
@@ -164,7 +164,7 @@ typedef long long streamoff;        // for char_traits in <string>
 
 template <class _CharT,             // for <stdexcept>
           class _Traits = char_traits<_CharT>,
-          class _Allocator = allocator<_CharT> > class basic_string;
+          class _Allocator = allocator<_CharT> > class _LIBCPP_VISIBLE basic_string;
 typedef basic_string<char, char_traits<char>, allocator<char> > string;
 typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;
 
diff --git a/include/memory b/include/memory
index 5b2b41dc..b4875ce7 100644
--- a/include/memory
+++ b/include/memory
@@ -1471,7 +1471,7 @@ struct __uses_alloc_ctor
 // allocator
 
 template <class _Tp>
-class allocator
+class _LIBCPP_VISIBLE allocator
 {
 public:
     typedef size_t            size_type;
diff --git a/include/string b/include/string
index fc15bc8a..4e6d7cd5 100644
--- a/include/string
+++ b/include/string
@@ -479,7 +479,7 @@ bool operator!=(const fpos<_StateT>& __x, const fpos<_StateT>& __y)
 // char_traits
 
 template <class _CharT>
-struct char_traits
+struct _LIBCPP_VISIBLE char_traits
 {
     typedef _CharT    char_type;
     typedef int       int_type;
@@ -591,7 +591,7 @@ char_traits<_CharT>::assign(char_type* __s, size_t __n, char_type __a)
 // char_traits<char>
 
 template <>
-struct char_traits<char>
+struct _LIBCPP_VISIBLE char_traits<char>
 {
     typedef char      char_type;
     typedef int       int_type;
@@ -933,7 +933,7 @@ __basic_string_common<__b>::__throw_out_of_range() const
 extern template class __basic_string_common<true>;
 
 template<class _CharT, class _Traits, class _Allocator>
-class basic_string
+class _LIBCPP_VISIBLE basic_string
     : private __basic_string_common<true>
 {
 public:
diff --git a/include/vector b/include/vector
index 7441cd01..f985a0e2 100644
--- a/include/vector
+++ b/include/vector
@@ -419,7 +419,7 @@ __vector_base<_Tp, _Allocator>::~__vector_base()
 }
 
 template <class _Tp, class _Allocator = allocator<_Tp> >
-class vector
+class _LIBCPP_VISIBLE vector
     : private __vector_base<_Tp, _Allocator>
 {
 private:
@@ -1682,7 +1682,7 @@ template <class _Allocator> class vector<bool, _Allocator>;
 template <class _Allocator> struct hash<vector<bool, _Allocator> >;
 
 template <class _Allocator>
-class vector<bool, _Allocator>
+class _LIBCPP_VISIBLE vector<bool, _Allocator>
     : private __vector_base_common<true>
 {
 public: