Date
2010-10-21.18:28:33
Message id
1926

Content

Proposed resolution:

  Change section 22.2.1.2 (lib.locale.ctype.byname) to become:

     namespace std {
       template <class charT>
       class ctype_byname : public ctype<charT> {
       public:
         typedef ctype<charT>::mask mask;
         explicit ctype_byname(const char*, size_t refs = 0);
       protected:
        ~ctype_byname();             //  virtual
       };
     }

  Change section 22.2.1.6 (lib.locale.codecvt.byname) to become:

    namespace std {
      template <class internT, class externT, class stateT>
      class codecvt_byname : public codecvt<internT, externT, stateT> {
      public:
       explicit codecvt_byname(const char*, size_t refs = 0);
      protected:
      ~codecvt_byname();             //  virtual
       };
     }

  Change section 22.2.3.2 (lib.locale.numpunct.byname) to become:

     namespace std {
       template <class charT>
       class numpunct_byname : public numpunct<charT> {
     //  this class is specialized for  char  and  wchar_t.
       public:
         typedef charT                char_type;
         typedef basic_string<charT>  string_type;
         explicit numpunct_byname(const char*, size_t refs = 0);
       protected:
        ~numpunct_byname();          //  virtual
       };
     }

  Change section 22.2.4.2 (lib.locale.collate.byname) to become:

     namespace std {
       template <class charT>
       class collate_byname : public collate<charT> {
       public:
         typedef basic_string<charT> string_type;
         explicit collate_byname(const char*, size_t refs = 0);
       protected:
        ~collate_byname();           //  virtual
       };
     }

  Change section 22.2.5.2 (lib.locale.time.get.byname) to become:

     namespace std {
       template <class charT, class InputIterator = istreambuf_iterator<charT> >
       class time_get_byname : public time_get<charT, InputIterator> {
       public:
         typedef time_base::dateorder dateorder;
         typedef InputIterator        iter_type
         explicit time_get_byname(const char*, size_t refs = 0);
       protected:
        ~time_get_byname();          //  virtual
       };
     }

  Change section 22.2.5.4 (lib.locale.time.put.byname) to become:

     namespace std {
       template <class charT, class OutputIterator = ostreambuf_iterator<charT> >
       class time_put_byname : public time_put<charT, OutputIterator>
       {
       public:
         typedef charT          char_type;
         typedef OutputIterator iter_type;
         explicit time_put_byname(const char*, size_t refs = 0);
       protected:
        ~time_put_byname();          //  virtual
       };
     }"

  Change section 22.2.6.4 (lib.locale.moneypunct.byname) to become:

     namespace std {
       template <class charT, bool Intl = false>
       class moneypunct_byname : public moneypunct<charT, Intl> {
       public:
         typedef money_base::pattern pattern;
         typedef basic_string<charT> string_type;
         explicit moneypunct_byname(const char*, size_t refs = 0);
       protected:
        ~moneypunct_byname();        //  virtual
       };
     }

  Change section 22.2.7.2 (lib.locale.messages.byname) to become:

     namespace std {
       template <class charT>
       class messages_byname : public messages<charT> {
       public:
         typedef messages_base::catalog catalog;
         typedef basic_string<charT>    string_type;
         explicit messages_byname(const char*, size_t refs = 0);
       protected:
        ~messages_byname();          //  virtual
       };
     }

Remove section [locale.codecvt] completely (because in this case only those members are defined to be virtual which are defined to be virtual in 'ctype<cT>'.)