_Ctypevec has some padding that can be eliminated by moving the pointers to the front. Here are the sizes before and after rearranging the members.
class _Ctypevec size(32):
+---
0 | _Page
| <alignment member> (size=4)
8 | _Table
16 | _Delfl
| <alignment member> (size=4)
24 | _LocaleName
+---
class std::ctype<char> size(48):
class std::ctype<wchar_t> size(96):
class std::ctype<unsigned short> size(96):
/////////// After
class _Ctypevec size(24):
+---
0 | _Table
8 | _LocaleName
16 | _Page
20 | _Delfl
+---
class std::ctype<char> size(40):
class std::ctype<wchar_t> size(88):
class std::ctype<unsigned short> size(88):
vNext note: Resolving this issue will require breaking binary compatibility. We won't be able to accept pull requests for this issue until the vNext branch is available. See #169 for more information.