aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/docs/17_intro/TODO
blob: 4da846277d6b1d9663f6556e2f082feb1b571acf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
- exception specifications need to be reviewed for all parts of the
library support and utility areas, particularly <new>. 

- exception/stdexcept headers will do, but are not cleanly
implemented. Also, some kind of consensus needs to be established on
if the presence of stdexcept should be assumed in iostreams
headers. V3 currently takes the position that references to stdexcept
classes necessitates the inclusion of stdexcept, other library vendors
seem less inclined.

- scoping/linking issues WRT to C structs need to be worked out. See
Nathan's commentary on cantrip, http://www.cantrip.org/cheaders.html

- triglyphs/ciso646: and, and_eq, bitand, bitor, compl, not, not_eq,
or, or_eq, xor, xor_eq, true && 45, true and false, true or 45, etc.
(bool and int), etc.

- operator!= and utility/rel_ops operators need to be made safe with
string and vector iterator classes. basic_string::reverse_iterator may
be implemented incorrectly, or need things like
operator==(__normal_iterator, const char*&), and swap(vector)

- SGI iterator/allocator classes are not strictly conforming. In
particular, raw_storage_iterator, mem_fun1_ref_t are all problem
areas.

- auto_ptr: seems to be some disagreement on what is
standards-conformant behavior, specially on conversion operators.

- vswprintf, vwprintf, wprintf, wscanf, wcsftime, swscanf, fgetws,
fputwc, fputws, fwide, fwprintf, fwscanf, getwc, getwchar, putwc, etc:
C library wchar_t functionality.

- facets heirarchies seem on occasion give odd errors to conformace
tests. Need to test that they are constructed in a strictly-conforming
manner.

- stuff like `LC_CTYPE' is not found. Locale oddness?

- header optimizations to keep compile times reasonable are most
certainly detracting from full conformance, as many templatized
definitions are squired away and pre-instantiated, so that the
compiler doesn't have to parse them. Areas effected: valarray, string,
all of iostreams and locales.

- basic_string<wchar_T> not implemented

- ostreambuf_iterator has not been made standards-conformant (both
char and wchar_t) In particular, look at 
time_put::put(OutIt, ios_base&, char, const tm*, const char*, const
char*) const

- C-related issues WRT to libio and filepos, mbstate_t. Need to
straighten this stuff out with the glibc-2.2 libio. Also may need to
define operators for mbstate_t so that 'mbstate_t& == mbstate_t' is
something that can be done.

- codecvt<wchar_t> has not been adequently handled in terms of the
locale bits. (The io bits are done, with the exception of one
ostream<wchar_t> inserter for char.

- bool locale::operator() looks to be non-conformant

- num_get<char>::do_get<user_defined_type> 
  num_put<char>::do_put<user_defined_type> 
num_put<char, char *>::do_put(char *, ios_base &, char, long double) const
num_put<char, char *>::do_put(char *, ios_base &, char, double) const
num_put<char, char *>::do_put(char *, ios_base &, char, void const *) const
etc.
appear to be broken, or headers mashed, or undefined.

- locale and std::combine not working correctly
 template <class _Facet> class locale locale::combine(const locale &)

- ctype_byname<char>: check to make sure derivation standards-conformant.

- codecvt::unshift not working for char, wchar_t

- no match for money_base::pattern &[int]

- money_get::do_get weirded out for wchar_t

- looks like deque::get_allocator not standards conformant or deque
allocator non-standard.

- list::assignment operator needs const_cast

- a cleaner division between pointers-to-value_type and true iterators
needs to be drawn throughout the entire STL implementation.

- priority_queue conversions may be non-conformant

- istream_iterator uses 2 arguments, should it be 4?

- 'do the right thing' ctor fixing needs to be done for string. This
is still subject to some debate on the library issues list, so I
suggest punting till the dust clears.

- the ctype and "tolower" "isspace" stuff really needs to be sorted
out. A portable, cross platform interface needs to be defined. A
"fixincludes"-like solution needs to be put into place to prune
headers. The "C" functions need to be able to work in std:: and "C"
namespaces.

- complex<float> seems to be the single largest source of internal
compiler errors when compiling the c++ library across non-x86
platforms. Somebody needs to make sure the complex support builtin to
gcc is actually working. Just as a "for-instance" these things give ICEs:
class complex<float>& complex<float>::operator-=<float>(const complex<float> &)
class complex<float>& complex<float>::operator/=<float>(const complex<float> &)
class complex<float>& complex<float>::operator+=<float>(const complex<float> &)
class complex<float>& complex<float>::operator-=<float>(const complex<float> &)
class complex<float>& complex<float>::operator*=<float>(const complex<float> &)

- appears as if the following extraction operators are undefined:
operator>>(istream, complex<float>&)
operator>>(istream, complex<double>&)
operator>>(istream, complex<long double>&)
operator>>(istream, complex<user_defined_type>&)
sqrt (const complex<T>& x)

- Protect valarray::result_type (not Standard) and make it work with
  the various helper classes.

- Make sure `valarray<bool> & == _Expr<_BinClos<logical_or,_ValArray,_ValArray,double,double>,bool>' 
  is defined

- long double std_cmath stuff looks weak

- fwide not declared. C++ wchar_t issues completely unaddressed.

- known issues WRT to io and corner cases with the buffers. This is
still subject to interpretation, and I think the current
implementation is credible.

- All of the Library working group closed issues need to be
addressed. Some of them proposed resolutions are already in the v-3
sources, with macro-guards.

- add deprecated features from Annex D
  - add #ifdef wrappers for all of them, including in each
    C <xxx.h> header
  - replace typedef'd non-deprecated types with more type-safe equivalents.

- add optimization hooks (esp. whitespace eating) to streambuf
  - add _M_begin() and _M_end() to streambuf
  - add algorithm specializations for [io]streambuf_iterator (copy find etc.)

- fix template members of basic_string<> to overload iterators and
  non-iterators properly.  (This is the infamous hack as in vector<> etc
  23.1.1 para 10.)

- write filebuf for wide characters

- replace stl/bits/stl_config 

- add feature-test macros for non-standard extensions

- move major extensions into separate namespace (e.g. stl::)

- create MT abstraction layer

- add MT support for locale, string, istream, ostream

- specialize functions that use_facet<> calls on failure for the required 
  facets, and construct them lazily so unused facets need not be constructed 
  when the locale is. 

- get mknumeric_limits coope with 'exotic' OSes.

- <cmath>: provide missing names. 

- provide testsuites for numerics.

- add FAQ entries -- improve the install instructions

- add HOWTO entries