diff --git a/libstdc++-v3/include/bits/fs_dir.h b/libstdc++-v3/include/bits/fs_dir.h
index 686dfce6e5f..264fa783bbb 100644
--- a/libstdc++-v3/include/bits/fs_dir.h
+++ b/libstdc++-v3/include/bits/fs_dir.h
@@ -312,7 +312,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
 #endif
 
   private:
-    friend class _Dir;
+    friend struct _Dir;
     friend class directory_iterator;
     friend class recursive_directory_iterator;
 
diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h
index 8fecc0b6525..824b07b6476 100644
--- a/libstdc++-v3/include/bits/localefwd.h
+++ b/libstdc++-v3/include/bits/localefwd.h
@@ -122,7 +122,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     tolower(_CharT, const locale&);
 
   // 22.2.1 and 22.2.1.3 ctype
-  class ctype_base;
+  struct ctype_base;
   template<typename _CharT>
     class ctype;
   template<> class ctype<char>;
@@ -200,7 +200,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
 _GLIBCXX_END_NAMESPACE_CXX11
 
   // 22.2.7 message retrieval
-  class messages_base;
+  struct messages_base;
 _GLIBCXX_BEGIN_NAMESPACE_CXX11
   template<typename _CharT>
     class messages;
diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h
index 4032fd7559b..31ebcc1eb86 100644
--- a/libstdc++-v3/include/bits/regex.h
+++ b/libstdc++-v3/include/bits/regex.h
@@ -77,12 +77,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
    * satisfies the requirements of such a traits class.
    */
   template<typename _Ch_type>
-    struct regex_traits
+    class regex_traits
     {
     public:
       typedef _Ch_type				char_type;
       typedef std::basic_string<char_type>	string_type;
       typedef std::locale			locale_type;
+
     private:
       struct _RegexMask
 	{
diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h
index 2772d11462e..7120f9bcfc8 100644
--- a/libstdc++-v3/include/bits/stl_map.h
+++ b/libstdc++-v3/include/bits/stl_map.h
@@ -635,7 +635,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       { return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); }
 
       template<typename, typename>
-	friend class std::_Rb_tree_merge_helper;
+	friend struct std::_Rb_tree_merge_helper;
 
       template<typename _Cmp2>
 	void
diff --git a/libstdc++-v3/include/bits/stl_multimap.h b/libstdc++-v3/include/bits/stl_multimap.h
index 65f4d0117a4..2791a3c6b3c 100644
--- a/libstdc++-v3/include/bits/stl_multimap.h
+++ b/libstdc++-v3/include/bits/stl_multimap.h
@@ -651,7 +651,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       { return _M_t._M_reinsert_node_hint_equal(__hint, std::move(__nh)); }
 
       template<typename, typename>
-	friend class std::_Rb_tree_merge_helper;
+	friend struct std::_Rb_tree_merge_helper;
 
       template<typename _Cmp2>
 	void
diff --git a/libstdc++-v3/include/bits/stl_multiset.h b/libstdc++-v3/include/bits/stl_multiset.h
index bf6ae7de095..34ba7364f15 100644
--- a/libstdc++-v3/include/bits/stl_multiset.h
+++ b/libstdc++-v3/include/bits/stl_multiset.h
@@ -589,7 +589,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       { return _M_t._M_reinsert_node_hint_equal(__hint, std::move(__nh)); }
 
       template<typename, typename>
-	friend class std::_Rb_tree_merge_helper;
+	friend struct std::_Rb_tree_merge_helper;
 
       template<typename _Compare1>
 	void
diff --git a/libstdc++-v3/include/bits/stl_set.h b/libstdc++-v3/include/bits/stl_set.h
index da426650815..c8631279c1f 100644
--- a/libstdc++-v3/include/bits/stl_set.h
+++ b/libstdc++-v3/include/bits/stl_set.h
@@ -604,7 +604,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       { return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); }
 
       template<typename, typename>
-	friend class std::_Rb_tree_merge_helper;
+	friend struct std::_Rb_tree_merge_helper;
 
       template<typename _Compare1>
 	void
diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index f2917b8c368..db147f47b13 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -124,8 +124,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    *  @param  Tp  Type of real and imaginary values.
   */
   template<typename _Tp>
-    struct complex
+    class complex
     {
+    public:
       /// Value typedef.
       typedef _Tp value_type;
 
@@ -1079,8 +1080,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   /// 26.2.3  complex specializations
   /// complex<float> specialization
   template<>
-    struct complex<float>
+    class complex<float>
     {
+    public:
       typedef float value_type;
       typedef __complex__ float _ComplexT;
 
@@ -1224,8 +1226,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   /// 26.2.3  complex specializations
   /// complex<double> specialization
   template<>
-    struct complex<double>
+    class complex<double>
     {
+    public:
       typedef double value_type;
       typedef __complex__ double _ComplexT;
 
@@ -1369,8 +1372,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   /// 26.2.3  complex specializations
   /// complex<long double> specialization
   template<>
-    struct complex<long double>
+    class complex<long double>
     {
+    public:
       typedef long double value_type;
       typedef __complex__ long double _ComplexT;
 
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index 2a9b2a003db..124bdadd4c7 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -395,7 +395,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   /// Type of the function object returned from bind().
   template<typename _Signature>
-    struct _Bind;
+    class _Bind;
 
    template<typename _Functor, typename... _Bound_args>
     class _Bind<_Functor(_Bound_args...)>
@@ -546,7 +546,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   /// Type of the function object returned from bind<R>().
   template<typename _Result, typename _Signature>
-    struct _Bind_result;
+    class _Bind_result;
 
   template<typename _Result, typename _Functor, typename... _Bound_args>
     class _Bind_result<_Result, _Functor(_Bound_args...)>
diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index 97506a27e37..6eef6864f4d 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -1048,7 +1048,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       typedef __future_base::_State_base 	_State;
       typedef __future_base::_Result<_Res>	_Res_type;
       typedef __future_base::_Ptr<_Res_type>	_Ptr_type;
-      template<typename, typename> friend class _State::_Setter;
+      template<typename, typename> friend struct _State::_Setter;
       friend _State;
 
       shared_ptr<_State>                        _M_future;
@@ -1159,7 +1159,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       typedef __future_base::_State_base	_State;
       typedef __future_base::_Result<_Res&>	_Res_type;
       typedef __future_base::_Ptr<_Res_type> 	_Ptr_type;
-      template<typename, typename> friend class _State::_Setter;
+      template<typename, typename> friend struct _State::_Setter;
       friend _State;
 
       shared_ptr<_State>                        _M_future;
@@ -1249,7 +1249,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       typedef __future_base::_State_base	_State;
       typedef __future_base::_Result<void>	_Res_type;
       typedef __future_base::_Ptr<_Res_type> 	_Ptr_type;
-      template<typename, typename> friend class _State::_Setter;
+      template<typename, typename> friend struct _State::_Setter;
       friend _State;
 
       shared_ptr<_State>                        _M_future;
diff --git a/libstdc++-v3/include/std/system_error b/libstdc++-v3/include/std/system_error
index f92b4345895..864b73e25ab 100644
--- a/libstdc++-v3/include/std/system_error
+++ b/libstdc++-v3/include/std/system_error
@@ -177,8 +177,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    * library might be represented by an HTTP response status code (e.g. 404)
    * and a custom category defined by the library.
    */
-  struct error_code
+  class error_code
   {
+  public:
     error_code() noexcept
     : _M_value(0), _M_cat(&system_category()) { }
 
@@ -275,8 +276,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    * An `error_condition` represents something that the program can test for,
    * and subsequently take appropriate action.
    */
-  struct error_condition
+  class error_condition
   {
+  public:
     error_condition() noexcept
     : _M_value(0), _M_cat(&generic_category()) { }
 
diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread
index e1bba0cb29b..0445ab1e319 100644
--- a/libstdc++-v3/include/std/thread
+++ b/libstdc++-v3/include/std/thread
@@ -97,7 +97,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
     private:
       friend class thread;
-      friend class hash<id>;
+      friend struct hash<id>;
 
       friend bool
       operator==(id __x, id __y) noexcept;
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index 726ad0aabbb..0dc11768a90 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -192,7 +192,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     : public _Tuple_impl<_Idx + 1, _Tail...>,
       private _Head_base<_Idx, _Head>
     {
-      template<size_t, typename...> friend class _Tuple_impl;
+      template<size_t, typename...> friend struct _Tuple_impl;
 
       typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited;
       typedef _Head_base<_Idx, _Head> _Base;
@@ -341,7 +341,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct _Tuple_impl<_Idx, _Head>
     : private _Head_base<_Idx, _Head>
     {
-      template<size_t, typename...> friend class _Tuple_impl;
+      template<size_t, typename...> friend struct _Tuple_impl;
 
       typedef _Head_base<_Idx, _Head> _Base;
 
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index 9cd3a2df41a..426febccdf9 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -2343,7 +2343,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   /// result_of
   template<typename _Signature>
-    class result_of;
+    struct result_of;
 
   // Sfinae-friendly result_of implementation:
 
diff --git a/libstdc++-v3/include/std/valarray b/libstdc++-v3/include/std/valarray
index be2e70dc06a..9981b609aab 100644
--- a/libstdc++-v3/include/std/valarray
+++ b/libstdc++-v3/include/std/valarray
@@ -571,7 +571,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       size_t _M_size;
       _Tp* __restrict__ _M_data;
 
-      friend class _Array<_Tp>;
+      friend struct _Array<_Tp>;
     };
 
 #if __cpp_deduction_guides >= 201606
