This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of CD1 status.

### 695. ctype<char>::classic_table() not accessible

Section: 30.4.2.4 [facet.ctype.special] Status: CD1 Submitter: Martin Sebor Opened: 2007-06-22 Last modified: 2016-01-28

Priority: Not Prioritized

View all issues with CD1 status.

Discussion:

The `ctype<char>::classic_table()` static member function returns a pointer to an array of const `ctype_base::mask` objects (enums) that contains `ctype<char>::table_size` elements. The table describes the properties of the character set in the "C" locale (i.e., whether a character at an index given by its value is alpha, digit, punct, etc.), and is typically used to initialize the `ctype<char>` facet in the classic "C" locale (the protected `ctype<char>` member function `table()` then returns the same value as `classic_table()`).

However, while `ctype<char>::table_size` (the size of the table) is a public static const member of the `ctype<char>` specialization, the `classic_table()` static member function is protected. That makes getting at the classic data less than convenient (i.e., one has to create a whole derived class just to get at the masks array). It makes little sense to expose the size of the table in the public interface while making the table itself protected, especially when the table is a constant object.

The same argument can be made for the non-static protected member function `table()`.

Proposed resolution:

Make the `ctype<char>::classic_table()` and `ctype<char>::table()` member functions public by moving their declarations into the public section of the definition of specialization in 30.4.2.4 [facet.ctype.special] as shown below:

>       static locale::id id;
>       static const size_t table_size = IMPLEMENTATION_DEFINED;
>     protected:
>       const mask* table() const throw();
>       static const mask* classic_table() throw();
>     protected:

>     ~ctype(); // virtual
>     virtual char do_toupper(char c) const;