]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR78702 fix accessibility of locale::facet::__shim
authorJonathan Wakely <jwakely@redhat.com>
Tue, 14 Feb 2017 21:17:23 +0000 (21:17 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 14 Feb 2017 21:17:23 +0000 (21:17 +0000)
Backport from mainline
2017-01-16  Jonathan Wakely  <jwakely@redhat.com>

PR libstdc++/78702
* include/bits/locale_classes.h (locale::facet::__shim): Change from
private to protected.
* src/c++11/cxx11-shim_facets.cc (__shim_accessor): Define helper to
make locale::facet::__shim accessible.

From-SVN: r245456

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/locale_classes.h
libstdc++-v3/src/c++11/cxx11-shim_facets.cc

index 8bccfc8f9cdc0232dce95c17115a273341eded92..83aa39b1d93738bcea41719596508765a4cf832b 100644 (file)
@@ -1,5 +1,14 @@
 2017-02-14  Jonathan Wakely  <jwakely@redhat.com>
 
+       Backport from mainline
+       2017-01-16  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/78702
+       * include/bits/locale_classes.h (locale::facet::__shim): Change from
+       private to protected.
+       * src/c++11/cxx11-shim_facets.cc (__shim_accessor): Define helper to
+       make locale::facet::__shim accessible.
+
        Backport from mainline
        2017-01-11  Jonathan Wakely  <jwakely@redhat.com>
 
index f3898ebf7b2ef40c4da245a3e46dca11eb18eec1..49fbe178b94d51ba8bdeb9ad75b5e142b5912f7b 100644 (file)
@@ -453,10 +453,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     facet&
     operator=(const facet&);  // Not defined.
 
-    class __shim;
-
     const facet* _M_sso_shim(const id*) const;
     const facet* _M_cow_shim(const id*) const;
+
+  protected:
+    class __shim; // For internal use only.
   };
 
 
index 4e30088bac3732520c35744018ed8bd5940277b0..f703688e9dc61711c8054551e0e6743add340800 100644 (file)
@@ -226,8 +226,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   namespace // unnamed
   {
+    struct __shim_accessor : facet
+    {
+      using facet::__shim;  // Redeclare protected member as public.
+    };
+    using __shim = __shim_accessor::__shim;
+
     template<typename _CharT>
-      struct numpunct_shim : std::numpunct<_CharT>, facet::__shim
+      struct numpunct_shim : std::numpunct<_CharT>, __shim
       {
        typedef typename numpunct<_CharT>::__cache_type __cache_type;
 
@@ -251,7 +257,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       };
 
     template<typename _CharT>
-      struct collate_shim : std::collate<_CharT>, facet::__shim
+      struct collate_shim : std::collate<_CharT>, __shim
       {
        typedef basic_string<_CharT>    string_type;
 
@@ -276,7 +282,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       };
 
     template<typename _CharT>
-      struct time_get_shim : std::time_get<_CharT>, facet::__shim
+      struct time_get_shim : std::time_get<_CharT>, __shim
       {
        typedef typename std::time_get<_CharT>::iter_type iter_type;
        typedef typename std::time_get<_CharT>::char_type char_type;
@@ -330,7 +336,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       };
 
     template<typename _CharT, bool _Intl>
-      struct moneypunct_shim : std::moneypunct<_CharT, _Intl>, facet::__shim
+      struct moneypunct_shim : std::moneypunct<_CharT, _Intl>, __shim
       {
        typedef typename moneypunct<_CharT, _Intl>::__cache_type __cache_type;
 
@@ -357,7 +363,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       };
 
     template<typename _CharT>
-      struct money_get_shim : std::money_get<_CharT>, facet::__shim
+      struct money_get_shim : std::money_get<_CharT>, __shim
       {
        typedef typename std::money_get<_CharT>::iter_type iter_type;
        typedef typename std::money_get<_CharT>::char_type char_type;
@@ -398,7 +404,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       };
 
     template<typename _CharT>
-      struct money_put_shim : std::money_put<_CharT>, facet::__shim
+      struct money_put_shim : std::money_put<_CharT>, __shim
       {
        typedef typename std::money_put<_CharT>::iter_type iter_type;
        typedef typename std::money_put<_CharT>::char_type char_type;
@@ -427,7 +433,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       };
 
     template<typename _CharT>
-      struct messages_shim : std::messages<_CharT>, facet::__shim
+      struct messages_shim : std::messages<_CharT>, __shim
       {
        typedef messages_base::catalog  catalog;
        typedef basic_string<_CharT>    string_type;