]>
Commit | Line | Data |
---|---|---|
8a165db0 BK |
1 | <?xml version='1.0'?> |
2 | <!DOCTYPE part PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" | |
3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" | |
4 | [ ]> | |
5 | ||
6 | <part id="manual.intro" xreflabel="Introduction"> | |
7 | <?dbhtml filename="intro.html"?> | |
8 | ||
9 | <partinfo> | |
10 | <keywordset> | |
11 | <keyword> | |
12 | ISO C++ | |
13 | </keyword> | |
14 | <keyword> | |
15 | library | |
16 | </keyword> | |
17 | </keywordset> | |
18 | </partinfo> | |
19 | ||
f86ce601 BK |
20 | <title> |
21 | Introduction | |
22 | <indexterm><primary>Introduction</primary></indexterm> | |
23 | </title> | |
8a165db0 BK |
24 | <!-- Chapter 01 : Status --> |
25 | <chapter id="manual.intro.status" xreflabel="Status"> | |
5e623d0b | 26 | <?dbhtml filename="status.html"?> |
8a165db0 BK |
27 | <title>Status</title> |
28 | ||
5e623d0b | 29 | <!-- Section 01 : Implementation Status --> |
92851a93 | 30 | <sect1 id="manual.intro.status.iso" xreflabel="Status"> |
8a165db0 BK |
31 | <title>Implementation Status</title> |
32 | ||
5e623d0b | 33 | <!-- Section 01.1 : Status C++ 1998 --> |
8a165db0 BK |
34 | <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" |
35 | parse="xml" href="status_cxx1998.xml"> | |
36 | </xi:include> | |
37 | ||
5e623d0b | 38 | <!-- Section 01.2 : Status C++ TR1 --> |
8a165db0 BK |
39 | <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" |
40 | parse="xml" href="status_cxxtr1.xml"> | |
41 | </xi:include> | |
42 | ||
5e623d0b | 43 | <!-- Section 01.3 : Status C++ 200x --> |
8a165db0 BK |
44 | <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" |
45 | parse="xml" href="status_cxx200x.xml"> | |
46 | </xi:include> | |
47 | </sect1> | |
48 | ||
49 | <!-- Section 02 : License --> | |
50 | <sect1 id="manual.intro.status.license" xreflabel="License"> | |
5e623d0b | 51 | <?dbhtml filename="license.html"?> |
8a165db0 BK |
52 | <title>License</title> |
53 | <para> | |
54 | There are two licenses affecting GNU libstdc++: one for the code, | |
55 | and one for the documentation. | |
56 | </para> | |
57 | ||
58 | <para> | |
59 | There is a license section in the FAQ regarding common <link | |
60 | linkend="faq.license">questions</link>. If you have more | |
61 | questions, ask the FSF or the <ulink | |
62 | url="http://gcc.gnu.org/lists.html">gcc mailing list</ulink>. | |
63 | </para> | |
64 | ||
65 | <sect2 id="manual.intro.status.license.gpl" xreflabel="License GPL"> | |
66 | <title>The Code: GPL</title> | |
67 | ||
68 | <para> | |
69 | The source code is distributed under the <link | |
748086b7 JJ |
70 | linkend="appendix.gpl-3.0">GNU General Public License version 3</link>, |
71 | with the addition under section 7 of an exception described in | |
72 | the <quote>GCC Runtime Library Exception, version 3.1</quote> | |
73 | as follows (or see the file COPYING.RUNTIME): | |
8a165db0 BK |
74 | </para> |
75 | ||
76 | <literallayout> | |
748086b7 JJ |
77 | GCC RUNTIME LIBRARY EXCEPTION |
78 | ||
79 | Version 3.1, 31 March 2009 | |
80 | ||
fb8c6cc9 | 81 | Copyright (C) 2009 <ulink url="http://www.fsf.org">Free Software Foundation, Inc.</ulink> |
748086b7 JJ |
82 | |
83 | Everyone is permitted to copy and distribute verbatim copies of this | |
84 | license document, but changing it is not allowed. | |
85 | ||
86 | This GCC Runtime Library Exception ("Exception") is an additional | |
87 | permission under section 7 of the GNU General Public License, version | |
88 | 3 ("GPLv3"). It applies to a given file (the "Runtime Library") that | |
89 | bears a notice placed by the copyright holder of the file stating that | |
90 | the file is governed by GPLv3 along with this Exception. | |
91 | ||
92 | When you use GCC to compile a program, GCC may combine portions of | |
93 | certain GCC header files and runtime libraries with the compiled | |
94 | program. The purpose of this Exception is to allow compilation of | |
95 | non-GPL (including proprietary) programs to use, in this way, the | |
96 | header files and runtime libraries covered by this Exception. | |
97 | ||
98 | 0. Definitions. | |
99 | ||
100 | A file is an "Independent Module" if it either requires the Runtime | |
101 | Library for execution after a Compilation Process, or makes use of an | |
102 | interface provided by the Runtime Library, but is not otherwise based | |
103 | on the Runtime Library. | |
104 | ||
105 | "GCC" means a version of the GNU Compiler Collection, with or without | |
106 | modifications, governed by version 3 (or a specified later version) of | |
107 | the GNU General Public License (GPL) with the option of using any | |
108 | subsequent versions published by the FSF. | |
109 | ||
110 | "GPL-compatible Software" is software whose conditions of propagation, | |
111 | modification and use would permit combination with GCC in accord with | |
112 | the license of GCC. | |
113 | ||
114 | "Target Code" refers to output from any compiler for a real or virtual | |
115 | target processor architecture, in executable form or suitable for | |
116 | input to an assembler, loader, linker and/or execution | |
117 | phase. Notwithstanding that, Target Code does not include data in any | |
118 | format that is used as a compiler intermediate representation, or used | |
119 | for producing a compiler intermediate representation. | |
120 | ||
121 | The "Compilation Process" transforms code entirely represented in | |
122 | non-intermediate languages designed for human-written code, and/or in | |
123 | Java Virtual Machine byte code, into Target Code. Thus, for example, | |
124 | use of source code generators and preprocessors need not be considered | |
125 | part of the Compilation Process, since the Compilation Process can be | |
126 | understood as starting with the output of the generators or | |
127 | preprocessors. | |
128 | ||
129 | A Compilation Process is "Eligible" if it is done using GCC, alone or | |
130 | with other GPL-compatible software, or if it is done without using any | |
131 | work based on GCC. For example, using non-GPL-compatible Software to | |
132 | optimize any GCC intermediate representations would not qualify as an | |
133 | Eligible Compilation Process. | |
134 | ||
135 | 1. Grant of Additional Permission. | |
136 | ||
137 | You have permission to propagate a work of Target Code formed by | |
138 | combining the Runtime Library with Independent Modules, even if such | |
139 | propagation would otherwise violate the terms of GPLv3, provided that | |
140 | all Target Code was generated by Eligible Compilation Processes. You | |
141 | may then convey such a combination under terms of your choice, | |
142 | consistent with the licensing of the Independent Modules. | |
143 | ||
144 | 2. No Weakening of GCC Copyleft. | |
145 | ||
146 | The availability of this Exception does not imply any general | |
147 | presumption that third-party software is unaffected by the copyleft | |
148 | requirements of the license of GCC. | |
8a165db0 BK |
149 | </literallayout> |
150 | ||
151 | <para> | |
152 | Hopefully that text is self-explanatory. If it isn't, you need to speak | |
153 | to your lawyer, or the Free Software Foundation. | |
154 | </para> | |
155 | </sect2> | |
156 | ||
157 | <sect2 id="manual.intro.status.license.fdl" xreflabel="License FDL"> | |
158 | <title>The Documentation: GPL, FDL</title> | |
159 | ||
160 | <para> | |
161 | The documentation shipped with the library and made available over | |
162 | the web, excluding the pages generated from source comments, are | |
163 | copyrighted by the Free Software Foundation, and placed under the | |
164 | <link linkend="appendix.gfdl-1.2"> GNU Free Documentation | |
165 | License version 1.2</link>. There are no Front-Cover Texts, no | |
166 | Back-Cover Texts, and no Invariant Sections. | |
167 | </para> | |
168 | ||
169 | <para> | |
170 | For documentation generated by doxygen or other automated tools | |
171 | via processing source code comments and markup, the original source | |
172 | code license applies to the generated files. Thus, the doxygen | |
f86ce601 | 173 | documents are licensed <link linkend="appendix.gpl-3.0">GPL</link>. |
8a165db0 BK |
174 | </para> |
175 | ||
176 | <para> | |
177 | If you plan on making copies of the documentation, please let us know. | |
178 | We can probably offer suggestions. | |
179 | </para> | |
180 | </sect2> | |
181 | ||
182 | </sect1> | |
183 | ||
184 | <!-- Section 03 : Known Bugs --> | |
185 | <sect1 id="manual.intro.status.bugs" xreflabel="Bugs"> | |
5e623d0b | 186 | <?dbhtml filename="bugs.html"?> |
8a165db0 BK |
187 | <title>Bugs</title> |
188 | ||
189 | <sect2 id="manual.intro.status.bugs.impl" xreflabel="Bugs impl"> | |
190 | <title>Implementation Bugs</title> | |
191 | <para> | |
192 | Information on known bugs, details on efforts to fix them, and | |
193 | fixed bugs are all available as part of the GCC bug tracking | |
194 | system, <ulink | |
195 | url="http://gcc.gnu.org/bugzilla">bugzilla</ulink>, with the | |
196 | category set to <literal>libstdc++</literal>. | |
197 | </para> | |
198 | </sect2> | |
199 | ||
200 | <sect2 id="manual.intro.status.bugs.iso" xreflabel="Bugs iso"> | |
201 | <title>Standard Bugs</title> | |
202 | <para> | |
203 | Everybody's got issues. Even the C++ Standard Library. | |
204 | </para> | |
205 | <para> | |
206 | The Library Working Group, or LWG, is the ISO subcommittee responsible | |
207 | for making changes to the library. They periodically publish an | |
208 | Issues List containing problems and possible solutions. As they reach | |
209 | a consensus on proposed solutions, we often incorporate the solution. | |
210 | </para> | |
211 | <para> | |
212 | Here are the issues which have resulted in code changes to the library. | |
213 | The links are to the specific defect reports from a <emphasis>partial | |
214 | copy</emphasis> of the Issues List. You can read the full version online | |
215 | at the <ulink url="http://www.open-std.org/jtc1/sc22/wg21/">ISO C++ | |
216 | Committee homepage</ulink>, linked to on the | |
217 | <ulink url="http://gcc.gnu.org/readings.html">GCC "Readings" | |
218 | page</ulink>. If | |
219 | you spend a lot of time reading the issues, we recommend downloading | |
220 | the ZIP file and reading them locally. | |
221 | </para> | |
222 | <para> | |
223 | (NB: <emphasis>partial copy</emphasis> means that not all | |
224 | links within the lwg-*.html pages will work. Specifically, | |
225 | links to defect reports that have not been accorded full DR | |
226 | status will probably break. Rather than trying to mirror the | |
227 | entire issues list on our overworked web server, we recommend | |
228 | you go to the LWG homepage instead.) | |
229 | </para> | |
230 | <para> | |
231 | If a DR is not listed here, we may simply not have gotten to | |
232 | it yet; feel free to submit a patch. Search the include/bits | |
233 | and src directories for appearances of | |
234 | <constant>_GLIBCXX_RESOLVE_LIB_DEFECTS</constant> for examples | |
235 | of style. Note that we usually do not make changes to the | |
50fbf0c3 | 236 | code until an issue has reached <ulink url="../ext/lwg-active.html#DR">DR</ulink> status. |
8a165db0 BK |
237 | </para> |
238 | ||
239 | <variablelist> | |
19f6f5a4 | 240 | <varlistentry><term><ulink url="../ext/lwg-defects.html#5">5</ulink>: |
8a165db0 BK |
241 | <emphasis>string::compare specification questionable</emphasis> |
242 | </term> | |
243 | <listitem><para>This should be two overloaded functions rather than a single function. | |
244 | </para></listitem></varlistentry> | |
245 | ||
19f6f5a4 | 246 | <varlistentry><term><ulink url="../ext/lwg-defects.html#17">17</ulink>: |
8a165db0 BK |
247 | <emphasis>Bad bool parsing</emphasis> |
248 | </term> | |
249 | <listitem><para>Apparently extracting Boolean values was messed up... | |
250 | </para></listitem></varlistentry> | |
251 | ||
19f6f5a4 | 252 | <varlistentry><term><ulink url="../ext/lwg-defects.html#19">19</ulink>: |
8a165db0 BK |
253 | <emphasis>"Noconv" definition too vague</emphasis> |
254 | </term> | |
255 | <listitem><para>If <code>codecvt::do_in</code> returns <code>noconv</code> there are | |
256 | no changes to the values in <code>[to, to_limit)</code>. | |
257 | </para></listitem></varlistentry> | |
258 | ||
19f6f5a4 | 259 | <varlistentry><term><ulink url="../ext/lwg-defects.html#22">22</ulink>: |
8a165db0 BK |
260 | <emphasis>Member open vs flags</emphasis> |
261 | </term> | |
262 | <listitem><para>Re-opening a file stream does <emphasis>not</emphasis> clear the state flags. | |
263 | </para></listitem></varlistentry> | |
5ef46f95 | 264 | |
f50e1d84 | 265 | <varlistentry><term><ulink url="../ext/lwg-defects.html#23">23</ulink>: |
5ef46f95 PC |
266 | <emphasis>Num_get overflow result</emphasis> |
267 | </term> | |
268 | <listitem><para>Implement the proposed resolution. | |
269 | </para></listitem></varlistentry> | |
8a165db0 | 270 | |
19f6f5a4 | 271 | <varlistentry><term><ulink url="../ext/lwg-defects.html#25">25</ulink>: |
8a165db0 BK |
272 | <emphasis>String operator<< uses width() value wrong</emphasis> |
273 | </term> | |
274 | <listitem><para>Padding issues. | |
275 | </para></listitem></varlistentry> | |
276 | ||
19f6f5a4 | 277 | <varlistentry><term><ulink url="../ext/lwg-defects.html#48">48</ulink>: |
8a165db0 BK |
278 | <emphasis>Use of non-existent exception constructor</emphasis> |
279 | </term> | |
280 | <listitem><para>An instance of <code>ios_base::failure</code> is constructed instead. | |
281 | </para></listitem></varlistentry> | |
282 | ||
19f6f5a4 | 283 | <varlistentry><term><ulink url="../ext/lwg-defects.html#49">49</ulink>: |
8a165db0 BK |
284 | <emphasis>Underspecification of ios_base::sync_with_stdio</emphasis> |
285 | </term> | |
286 | <listitem><para>The return type is the <emphasis>previous</emphasis> state of synchronization. | |
287 | </para></listitem></varlistentry> | |
288 | ||
19f6f5a4 | 289 | <varlistentry><term><ulink url="../ext/lwg-defects.html#50">50</ulink>: |
8a165db0 BK |
290 | <emphasis>Copy constructor and assignment operator of ios_base</emphasis> |
291 | </term> | |
292 | <listitem><para>These members functions are declared <code>private</code> and are | |
293 | thus inaccessible. Specifying the correct semantics of | |
294 | "copying stream state" was deemed too complicated. | |
295 | </para></listitem></varlistentry> | |
296 | ||
19f6f5a4 | 297 | <varlistentry><term><ulink url="../ext/lwg-defects.html#60">60</ulink>: |
8a165db0 BK |
298 | <emphasis>What is a formatted input function?</emphasis> |
299 | </term> | |
300 | <listitem><para>This DR made many widespread changes to <code>basic_istream</code> | |
301 | and <code>basic_ostream</code> all of which have been implemented. | |
302 | </para></listitem></varlistentry> | |
303 | ||
19f6f5a4 | 304 | <varlistentry><term><ulink url="../ext/lwg-defects.html#63">63</ulink>: |
8a165db0 BK |
305 | <emphasis>Exception-handling policy for unformatted output</emphasis> |
306 | </term> | |
307 | <listitem><para>Make the policy consistent with that of formatted input, unformatted | |
308 | input, and formatted output. | |
309 | </para></listitem></varlistentry> | |
310 | ||
19f6f5a4 | 311 | <varlistentry><term><ulink url="../ext/lwg-defects.html#68">68</ulink>: |
8a165db0 BK |
312 | <emphasis>Extractors for char* should store null at end</emphasis> |
313 | </term> | |
314 | <listitem><para>And they do now. An editing glitch in the last item in the list of | |
315 | [27.6.1.2.3]/7. | |
316 | </para></listitem></varlistentry> | |
317 | ||
19f6f5a4 | 318 | <varlistentry><term><ulink url="../ext/lwg-defects.html#74">74</ulink>: |
8a165db0 BK |
319 | <emphasis>Garbled text for codecvt::do_max_length</emphasis> |
320 | </term> | |
321 | <listitem><para>The text of the standard was gibberish. Typos gone rampant. | |
322 | </para></listitem></varlistentry> | |
323 | ||
19f6f5a4 | 324 | <varlistentry><term><ulink url="../ext/lwg-defects.html#75">75</ulink>: |
8a165db0 BK |
325 | <emphasis>Contradiction in codecvt::length's argument types</emphasis> |
326 | </term> | |
327 | <listitem><para>Change the first parameter to <code>stateT&</code> and implement | |
328 | the new effects paragraph. | |
329 | </para></listitem></varlistentry> | |
330 | ||
50fbf0c3 | 331 | <varlistentry><term><ulink url="../ext/lwg-defects.html#83">83</ulink>: |
8a165db0 BK |
332 | <emphasis>string::npos vs. string::max_size()</emphasis> |
333 | </term> | |
334 | <listitem><para>Safety checks on the size of the string should test against | |
335 | <code>max_size()</code> rather than <code>npos</code>. | |
336 | </para></listitem></varlistentry> | |
337 | ||
19f6f5a4 | 338 | <varlistentry><term><ulink url="../ext/lwg-defects.html#90">90</ulink>: |
8a165db0 BK |
339 | <emphasis>Incorrect description of operator>> for strings</emphasis> |
340 | </term> | |
341 | <listitem><para>The effect contain <code>isspace(c,getloc())</code> which must be | |
342 | replaced by <code>isspace(c,is.getloc())</code>. | |
343 | </para></listitem></varlistentry> | |
344 | ||
19f6f5a4 | 345 | <varlistentry><term><ulink url="../ext/lwg-defects.html#91">91</ulink>: |
8a165db0 BK |
346 | <emphasis>Description of operator>> and getline() for string<> |
347 | might cause endless loop</emphasis> | |
348 | </term> | |
349 | <listitem><para>They behave as a formatted input function and as an unformatted | |
350 | input function, respectively (except that <code>getline</code> is | |
351 | not required to set <code>gcount</code>). | |
352 | </para></listitem></varlistentry> | |
353 | ||
19f6f5a4 | 354 | <varlistentry><term><ulink url="../ext/lwg-defects.html#103">103</ulink>: |
8a165db0 BK |
355 | <emphasis>set::iterator is required to be modifiable, but this allows |
356 | modification of keys.</emphasis> | |
357 | </term> | |
358 | <listitem><para>For associative containers where the value type is the same as | |
359 | the key type, both <code>iterator</code> and <code>const_iterator | |
360 | </code> are constant iterators. | |
361 | </para></listitem></varlistentry> | |
362 | ||
19f6f5a4 | 363 | <varlistentry><term><ulink url="../ext/lwg-defects.html#109">109</ulink>: |
8a165db0 BK |
364 | <emphasis>Missing binders for non-const sequence elements</emphasis> |
365 | </term> | |
366 | <listitem><para>The <code>binder1st</code> and <code>binder2nd</code> didn't have an | |
367 | <code>operator()</code> taking a non-const parameter. | |
368 | </para></listitem></varlistentry> | |
369 | ||
19f6f5a4 | 370 | <varlistentry><term><ulink url="../ext/lwg-defects.html#110">110</ulink>: |
8a165db0 BK |
371 | <emphasis>istreambuf_iterator::equal not const</emphasis> |
372 | </term> | |
373 | <listitem><para>This was not a const member function. Note that the DR says to | |
374 | replace the function with a const one; we have instead provided an | |
375 | overloaded version with identical contents. | |
376 | </para></listitem></varlistentry> | |
377 | ||
19f6f5a4 | 378 | <varlistentry><term><ulink url="../ext/lwg-defects.html#117">117</ulink>: |
8a165db0 BK |
379 | <emphasis>basic_ostream uses nonexistent num_put member functions</emphasis> |
380 | </term> | |
381 | <listitem><para><code>num_put::put()</code> was overloaded on the wrong types. | |
382 | </para></listitem></varlistentry> | |
383 | ||
19f6f5a4 | 384 | <varlistentry><term><ulink url="../ext/lwg-defects.html#118">118</ulink>: |
8a165db0 BK |
385 | <emphasis>basic_istream uses nonexistent num_get member functions</emphasis> |
386 | </term> | |
387 | <listitem><para>Same as 117, but for <code>num_get::get()</code>. | |
388 | </para></listitem></varlistentry> | |
389 | ||
19f6f5a4 | 390 | <varlistentry><term><ulink url="../ext/lwg-defects.html#129">129</ulink>: |
8a165db0 BK |
391 | <emphasis>Need error indication from seekp() and seekg()</emphasis> |
392 | </term> | |
393 | <listitem><para>These functions set <code>failbit</code> on error now. | |
394 | </para></listitem></varlistentry> | |
395 | ||
19f6f5a4 | 396 | <varlistentry><term><ulink url="../ext/lwg-defects.html#136">136</ulink>: |
8a165db0 BK |
397 | <emphasis>seekp, seekg setting wrong streams?</emphasis> |
398 | </term> | |
399 | <listitem><para><code>seekp</code> should only set the output stream, and | |
400 | <code>seekg</code> should only set the input stream. | |
401 | </para></listitem></varlistentry> | |
402 | ||
19f6f5a4 | 403 | <!--<varlistentry><term><ulink url="../ext/lwg-defects.html#159">159</ulink>: |
8a165db0 BK |
404 | <emphasis>Strange use of underflow()</emphasis> |
405 | </term> | |
406 | <listitem><para>In fstream.tcc, the basic_filebuf<>::showmanyc() function | |
407 | should probably not be calling <code>underflow()</code>. | |
408 | </para></listitem></varlistentry> --> | |
409 | ||
19f6f5a4 | 410 | <varlistentry><term><ulink url="../ext/lwg-defects.html#167">167</ulink>: |
8a165db0 BK |
411 | <emphasis>Improper use of traits_type::length()</emphasis> |
412 | </term> | |
413 | <listitem><para><code>op<<</code> with a <code>const char*</code> was | |
414 | calculating an incorrect number of characters to write. | |
415 | </para></listitem></varlistentry> | |
416 | ||
19f6f5a4 | 417 | <varlistentry><term><ulink url="../ext/lwg-defects.html#169">169</ulink>: |
8a165db0 BK |
418 | <emphasis>Bad efficiency of overflow() mandated</emphasis> |
419 | </term> | |
420 | <listitem><para>Grow efficiently the internal array object. | |
421 | </para></listitem></varlistentry> | |
422 | ||
19f6f5a4 | 423 | <varlistentry><term><ulink url="../ext/lwg-defects.html#171">171</ulink>: |
8a165db0 BK |
424 | <emphasis>Strange seekpos() semantics due to joint position</emphasis> |
425 | </term> | |
426 | <listitem><para>Quite complex to summarize... | |
427 | </para></listitem></varlistentry> | |
428 | ||
19f6f5a4 | 429 | <varlistentry><term><ulink url="../ext/lwg-defects.html#181">181</ulink>: |
8a165db0 BK |
430 | <emphasis>make_pair() unintended behavior</emphasis> |
431 | </term> | |
432 | <listitem><para>This function used to take its arguments as reference-to-const, now | |
433 | it copies them (pass by value). | |
434 | </para></listitem></varlistentry> | |
435 | ||
19f6f5a4 | 436 | <varlistentry><term><ulink url="../ext/lwg-defects.html#195">195</ulink>: |
8a165db0 BK |
437 | <emphasis>Should basic_istream::sentry's constructor ever set eofbit?</emphasis> |
438 | </term> | |
439 | <listitem><para>Yes, it can, specifically if EOF is reached while skipping whitespace. | |
440 | </para></listitem></varlistentry> | |
441 | ||
19f6f5a4 | 442 | <varlistentry><term><ulink url="../ext/lwg-defects.html#211">211</ulink>: |
8a165db0 BK |
443 | <emphasis>operator>>(istream&, string&) doesn't set failbit</emphasis> |
444 | </term> | |
445 | <listitem><para>If nothing is extracted into the string, <code>op>></code> now | |
446 | sets <code>failbit</code> (which can cause an exception, etc., etc.). | |
447 | </para></listitem></varlistentry> | |
448 | ||
19f6f5a4 | 449 | <varlistentry><term><ulink url="../ext/lwg-defects.html#214">214</ulink>: |
8a165db0 BK |
450 | <emphasis>set::find() missing const overload</emphasis> |
451 | </term> | |
452 | <listitem><para>Both <code>set</code> and <code>multiset</code> were missing | |
453 | overloaded find, lower_bound, upper_bound, and equal_range functions | |
454 | for const instances. | |
455 | </para></listitem></varlistentry> | |
456 | ||
19f6f5a4 | 457 | <varlistentry><term><ulink url="../ext/lwg-defects.html#231">231</ulink>: |
8a165db0 BK |
458 | <emphasis>Precision in iostream?</emphasis> |
459 | </term> | |
460 | <listitem><para>For conversion from a floating-point type, <code>str.precision()</code> | |
461 | is specified in the conversion specification. | |
462 | </para></listitem></varlistentry> | |
463 | ||
f50e1d84 | 464 | <varlistentry><term><ulink url="../ext/lwg-defects.html#233">233</ulink>: |
8a165db0 BK |
465 | <emphasis>Insertion hints in associative containers</emphasis> |
466 | </term> | |
467 | <listitem><para>Implement N1780, first check before then check after, insert as close | |
468 | to hint as possible. | |
469 | </para></listitem></varlistentry> | |
470 | ||
19f6f5a4 | 471 | <varlistentry><term><ulink url="../ext/lwg-defects.html#235">235</ulink>: |
8a165db0 BK |
472 | <emphasis>No specification of default ctor for reverse_iterator</emphasis> |
473 | </term> | |
474 | <listitem><para>The declaration of <code>reverse_iterator</code> lists a default constructor. | |
475 | However, no specification is given what this constructor should do. | |
476 | </para></listitem></varlistentry> | |
477 | ||
19f6f5a4 | 478 | <varlistentry><term><ulink url="../ext/lwg-defects.html#241">241</ulink>: |
8a165db0 BK |
479 | <emphasis>Does unique_copy() require CopyConstructible and Assignable?</emphasis> |
480 | </term> | |
481 | <listitem><para>Add a helper for forward_iterator/output_iterator, fix the existing | |
482 | one for input_iterator/output_iterator to not rely on Assignability. | |
483 | </para></listitem></varlistentry> | |
484 | ||
19f6f5a4 | 485 | <varlistentry><term><ulink url="../ext/lwg-defects.html#243">243</ulink>: |
8a165db0 BK |
486 | <emphasis>get and getline when sentry reports failure</emphasis> |
487 | </term> | |
488 | <listitem><para>Store a null character only if the character array has a non-zero size. | |
489 | </para></listitem></varlistentry> | |
490 | ||
19f6f5a4 | 491 | <varlistentry><term><ulink url="../ext/lwg-defects.html#251">251</ulink>: |
8a165db0 BK |
492 | <emphasis>basic_stringbuf missing allocator_type</emphasis> |
493 | </term> | |
494 | <listitem><para>This nested typedef was originally not specified. | |
495 | </para></listitem></varlistentry> | |
496 | ||
19f6f5a4 | 497 | <varlistentry><term><ulink url="../ext/lwg-defects.html#253">253</ulink>: |
8a165db0 BK |
498 | <emphasis>valarray helper functions are almost entirely useless</emphasis> |
499 | </term> | |
500 | <listitem><para>Make the copy constructor and copy-assignment operator declarations | |
501 | public in gslice_array, indirect_array, mask_array, slice_array; provide | |
502 | definitions. | |
503 | </para></listitem></varlistentry> | |
504 | ||
19f6f5a4 | 505 | <varlistentry><term><ulink url="../ext/lwg-defects.html#265">265</ulink>: |
8a165db0 BK |
506 | <emphasis>std::pair::pair() effects overly restrictive</emphasis> |
507 | </term> | |
508 | <listitem><para>The default ctor would build its members from copies of temporaries; | |
509 | now it simply uses their respective default ctors. | |
510 | </para></listitem></varlistentry> | |
511 | ||
19f6f5a4 | 512 | <varlistentry><term><ulink url="../ext/lwg-defects.html#266">266</ulink>: |
8a165db0 BK |
513 | <emphasis>bad_exception::~bad_exception() missing Effects clause</emphasis> |
514 | </term> | |
515 | <listitem><para>The <code>bad_</code>* classes no longer have destructors (they | |
516 | are trivial), since no description of them was ever given. | |
517 | </para></listitem></varlistentry> | |
518 | ||
19f6f5a4 | 519 | <varlistentry><term><ulink url="../ext/lwg-defects.html#271">271</ulink>: |
8a165db0 BK |
520 | <emphasis>basic_iostream missing typedefs</emphasis> |
521 | </term> | |
522 | <listitem><para>The typedefs it inherits from its base classes can't be used, since | |
523 | (for example) <code>basic_iostream<T>::traits_type</code> is ambiguous. | |
524 | </para></listitem></varlistentry> | |
525 | ||
19f6f5a4 | 526 | <varlistentry><term><ulink url="../ext/lwg-defects.html#275">275</ulink>: |
8a165db0 BK |
527 | <emphasis>Wrong type in num_get::get() overloads</emphasis> |
528 | </term> | |
529 | <listitem><para>Similar to 118. | |
530 | </para></listitem></varlistentry> | |
531 | ||
19f6f5a4 | 532 | <varlistentry><term><ulink url="../ext/lwg-defects.html#280">280</ulink>: |
8a165db0 BK |
533 | <emphasis>Comparison of reverse_iterator to const reverse_iterator</emphasis> |
534 | </term> | |
535 | <listitem><para>Add global functions with two template parameters. | |
536 | (NB: not added for now a templated assignment operator) | |
537 | </para></listitem></varlistentry> | |
538 | ||
19f6f5a4 | 539 | <varlistentry><term><ulink url="../ext/lwg-defects.html#292">292</ulink>: |
8a165db0 BK |
540 | <emphasis>Effects of a.copyfmt (a)</emphasis> |
541 | </term> | |
542 | <listitem><para>If <code>(this == &rhs)</code> do nothing. | |
543 | </para></listitem></varlistentry> | |
544 | ||
19f6f5a4 | 545 | <varlistentry><term><ulink url="../ext/lwg-defects.html#300">300</ulink>: |
8a165db0 BK |
546 | <emphasis>List::merge() specification incomplete</emphasis> |
547 | </term> | |
548 | <listitem><para>If <code>(this == &x)</code> do nothing. | |
549 | </para></listitem></varlistentry> | |
550 | ||
19f6f5a4 | 551 | <varlistentry><term><ulink url="../ext/lwg-defects.html#303">303</ulink>: |
8a165db0 BK |
552 | <emphasis>Bitset input operator underspecified</emphasis> |
553 | </term> | |
23ed71c6 PC |
554 | <listitem><para>Basically, compare the input character to |
555 | <code>is.widen(0)</code> and <code>is.widen(1)</code>. | |
8a165db0 BK |
556 | </para></listitem></varlistentry> |
557 | ||
19f6f5a4 | 558 | <varlistentry><term><ulink url="../ext/lwg-defects.html#305">305</ulink>: |
23ed71c6 PC |
559 | <emphasis>Default behavior of codecvt<wchar_t, char, |
560 | mbstate_t>::length()</emphasis> | |
8a165db0 | 561 | </term> |
23ed71c6 PC |
562 | <listitem><para>Do not specify what <code>codecvt<wchar_t, char, |
563 | mbstate_t>::do_length</code> must return. | |
8a165db0 BK |
564 | </para></listitem></varlistentry> |
565 | ||
19f6f5a4 | 566 | <varlistentry><term><ulink url="../ext/lwg-defects.html#328">328</ulink>: |
23ed71c6 PC |
567 | <emphasis>Bad sprintf format modifier in |
568 | money_put<>::do_put()</emphasis> | |
8a165db0 BK |
569 | </term> |
570 | <listitem><para>Change the format string to "%.0Lf". | |
571 | </para></listitem></varlistentry> | |
572 | ||
19f6f5a4 | 573 | <varlistentry><term><ulink url="../ext/lwg-defects.html#365">365</ulink>: |
8a165db0 BK |
574 | <emphasis>Lack of const-qualification in clause 27</emphasis> |
575 | </term> | |
576 | <listitem><para>Add const overloads of <code>is_open</code>. | |
577 | </para></listitem></varlistentry> | |
578 | ||
f50e1d84 | 579 | <varlistentry><term><ulink url="../ext/lwg-defects.html#387">387</ulink>: |
23ed71c6 PC |
580 | <emphasis>std::complex over-encapsulated</emphasis> |
581 | </term> | |
582 | <listitem><para>Add the <code>real(T)</code> and <code>imag(T)</code> | |
583 | members; in C++0x mode, also adjust the existing | |
584 | <code>real()</code> and <code>imag()</code> members and | |
585 | free functions. | |
586 | </para></listitem></varlistentry> | |
587 | ||
19f6f5a4 | 588 | <varlistentry><term><ulink url="../ext/lwg-defects.html#389">389</ulink>: |
23ed71c6 PC |
589 | <emphasis>Const overload of valarray::operator[] returns |
590 | by value</emphasis> | |
8a165db0 BK |
591 | </term> |
592 | <listitem><para>Change it to return a <code>const T&</code>. | |
593 | </para></listitem></varlistentry> | |
594 | ||
f50e1d84 | 595 | <varlistentry><term><ulink url="../ext/lwg-defects.html#396">396</ulink>: |
47cd1557 PC |
596 | <emphasis>what are characters zero and one</emphasis> |
597 | </term> | |
598 | <listitem><para>Implement the proposed resolution. | |
599 | </para></listitem></varlistentry> | |
600 | ||
19f6f5a4 | 601 | <varlistentry><term><ulink url="../ext/lwg-defects.html#402">402</ulink>: |
8a165db0 BK |
602 | <emphasis>Wrong new expression in [some_]allocator::construct</emphasis> |
603 | </term> | |
604 | <listitem><para>Replace "new" with "::new". | |
605 | </para></listitem></varlistentry> | |
606 | ||
19f6f5a4 | 607 | <varlistentry><term><ulink url="../ext/lwg-defects.html#409">409</ulink>: |
8a165db0 BK |
608 | <emphasis>Closing an fstream should clear the error state</emphasis> |
609 | </term> | |
610 | <listitem><para>Have <code>open</code> clear the error flags. | |
611 | </para></listitem></varlistentry> | |
612 | ||
19f6f5a4 | 613 | <varlistentry><term><ulink url="../ext/lwg-active.html#431">431</ulink>: |
8a165db0 BK |
614 | <emphasis>Swapping containers with unequal allocators</emphasis> |
615 | </term> | |
616 | <listitem><para>Implement Option 3, as per N1599. | |
617 | </para></listitem></varlistentry> | |
618 | ||
19f6f5a4 | 619 | <varlistentry><term><ulink url="../ext/lwg-defects.html#432">432</ulink>: |
8a165db0 BK |
620 | <emphasis>stringbuf::overflow() makes only one write position |
621 | available</emphasis> | |
622 | </term> | |
623 | <listitem><para>Implement the resolution, beyond DR 169. | |
624 | </para></listitem></varlistentry> | |
625 | ||
19f6f5a4 | 626 | <varlistentry><term><ulink url="../ext/lwg-defects.html#434">434</ulink>: |
8a165db0 BK |
627 | <emphasis>bitset::to_string() hard to use</emphasis> |
628 | </term> | |
629 | <listitem><para>Add three overloads, taking fewer template arguments. | |
630 | </para></listitem></varlistentry> | |
631 | ||
19f6f5a4 | 632 | <varlistentry><term><ulink url="../ext/lwg-defects.html#438">438</ulink>: |
8a165db0 BK |
633 | <emphasis>Ambiguity in the "do the right thing" clause</emphasis> |
634 | </term> | |
635 | <listitem><para>Implement the resolution, basically cast less. | |
636 | </para></listitem></varlistentry> | |
637 | ||
19f6f5a4 | 638 | <varlistentry><term><ulink url="../ext/lwg-defects.html#453">453</ulink>: |
8a165db0 BK |
639 | <emphasis>basic_stringbuf::seekoff need not always fail for an empty stream</emphasis> |
640 | </term> | |
641 | <listitem><para>Don't fail if the next pointer is null and newoff is zero. | |
642 | </para></listitem></varlistentry> | |
643 | ||
19f6f5a4 | 644 | <varlistentry><term><ulink url="../ext/lwg-defects.html#455">455</ulink>: |
8a165db0 BK |
645 | <emphasis>cerr::tie() and wcerr::tie() are overspecified</emphasis> |
646 | </term> | |
647 | <listitem><para>Initialize cerr tied to cout and wcerr tied to wcout. | |
648 | </para></listitem></varlistentry> | |
649 | ||
19f6f5a4 | 650 | <varlistentry><term><ulink url="../ext/lwg-defects.html#464">464</ulink>: |
8a165db0 BK |
651 | <emphasis>Suggestion for new member functions in standard containers</emphasis> |
652 | </term> | |
653 | <listitem><para>Add <code>data()</code> to <code>std::vector</code> and | |
654 | <code>at(const key_type&)</code> to <code>std::map</code>. | |
655 | </para></listitem></varlistentry> | |
656 | ||
19f6f5a4 | 657 | <varlistentry><term><ulink url="../ext/lwg-defects.html#508">508</ulink>: |
8a165db0 BK |
658 | <emphasis>Bad parameters for ranlux64_base_01</emphasis> |
659 | </term> | |
660 | <listitem><para>Fix the parameters. | |
661 | </para></listitem></varlistentry> | |
662 | ||
19f6f5a4 | 663 | <varlistentry><term><ulink url="../ext/lwg-closed.html#512">512</ulink>: |
8a165db0 BK |
664 | <emphasis>Seeding subtract_with_carry_01 from a single unsigned long</emphasis> |
665 | </term> | |
666 | <listitem><para>Construct a <code>linear_congruential</code> engine and seed with it. | |
667 | </para></listitem></varlistentry> | |
668 | ||
19f6f5a4 | 669 | <varlistentry><term><ulink url="../ext/lwg-closed.html#526">526</ulink>: |
8a165db0 BK |
670 | <emphasis>Is it undefined if a function in the standard changes in |
671 | parameters?</emphasis> | |
672 | </term> | |
673 | <listitem><para>Use &value. | |
674 | </para></listitem></varlistentry> | |
675 | ||
19f6f5a4 | 676 | <varlistentry><term><ulink url="../ext/lwg-defects.html#538">538</ulink>: |
8a165db0 BK |
677 | <emphasis>241 again: Does unique_copy() require CopyConstructible |
678 | and Assignable?</emphasis> | |
679 | </term> | |
680 | <listitem><para>In case of input_iterator/output_iterator rely on Assignability of | |
681 | input_iterator' value_type. | |
682 | </para></listitem></varlistentry> | |
683 | ||
19f6f5a4 | 684 | <varlistentry><term><ulink url="../ext/lwg-defects.html#541">541</ulink>: |
8a165db0 BK |
685 | <emphasis>shared_ptr template assignment and void</emphasis> |
686 | </term> | |
687 | <listitem><para>Add an auto_ptr<void> specialization. | |
688 | </para></listitem></varlistentry> | |
689 | ||
19f6f5a4 | 690 | <varlistentry><term><ulink url="../ext/lwg-defects.html#543">543</ulink>: |
8a165db0 BK |
691 | <emphasis>valarray slice default constructor</emphasis> |
692 | </term> | |
693 | <listitem><para>Follow the straightforward proposed resolution. | |
694 | </para></listitem></varlistentry> | |
695 | ||
7fd30be8 | 696 | <varlistentry><term><ulink url="../ext/lwg-defects.html#550">550</ulink>: |
774c3d86 PC |
697 | <emphasis>What should the return type of pow(float,int) be?</emphasis> |
698 | </term> | |
699 | <listitem><para>In C++0x mode, remove the pow(float,int), etc., signatures. | |
700 | </para></listitem></varlistentry> | |
701 | ||
19f6f5a4 | 702 | <varlistentry><term><ulink url="../ext/lwg-defects.html#586">586</ulink>: |
8a165db0 BK |
703 | <emphasis>string inserter not a formatted function</emphasis> |
704 | </term> | |
705 | <listitem><para>Change it to be a formatted output function (i.e. catch exceptions). | |
706 | </para></listitem></varlistentry> | |
707 | ||
7fd30be8 | 708 | <varlistentry><term><ulink url="../ext/lwg-defects.html#596">596</ulink>: |
8a165db0 BK |
709 | <emphasis>27.8.1.3 Table 112 omits "a+" and "a+b" modes</emphasis> |
710 | </term> | |
711 | <listitem><para>Add the missing modes to fopen_mode. | |
712 | </para></listitem></varlistentry> | |
713 | ||
af4beb4b PC |
714 | <varlistentry><term><ulink url="../ext/lwg-active.html#630">630</ulink>: |
715 | <emphasis>arrays of valarray</emphasis> | |
716 | </term> | |
717 | <listitem><para>Implement the simple resolution. | |
718 | </para></listitem></varlistentry> | |
719 | ||
19f6f5a4 | 720 | <varlistentry><term><ulink url="../ext/lwg-defects.html#660">660</ulink>: |
8a165db0 BK |
721 | <emphasis>Missing bitwise operations</emphasis> |
722 | </term> | |
723 | <listitem><para>Add the missing operations. | |
724 | </para></listitem></varlistentry> | |
725 | ||
f50e1d84 | 726 | <varlistentry><term><ulink url="../ext/lwg-defects.html#691">691</ulink>: |
64bd554c PC |
727 | <emphasis>const_local_iterator cbegin, cend missing from TR1</emphasis> |
728 | </term> | |
729 | <listitem><para>In C++0x mode add cbegin(size_type) and cend(size_type) | |
730 | to the unordered containers. | |
731 | </para></listitem></varlistentry> | |
732 | ||
19f6f5a4 | 733 | <varlistentry><term><ulink url="../ext/lwg-defects.html#693">693</ulink>: |
8a165db0 BK |
734 | <emphasis>std::bitset::all() missing</emphasis> |
735 | </term> | |
736 | <listitem><para>Add it, consistently with the discussion. | |
737 | </para></listitem></varlistentry> | |
738 | ||
19f6f5a4 | 739 | <varlistentry><term><ulink url="../ext/lwg-defects.html#695">695</ulink>: |
8a165db0 BK |
740 | <emphasis>ctype<char>::classic_table() not accessible</emphasis> |
741 | </term> | |
742 | <listitem><para>Make the member functions table and classic_table public. | |
743 | </para></listitem></varlistentry> | |
0fda18dd | 744 | |
6f0398bb | 745 | <varlistentry><term><ulink url="../ext/lwg-active.html#696">696</ulink>: |
fb8c6cc9 | 746 | <emphasis>istream::operator>>(int&) broken</emphasis> |
6f0398bb PC |
747 | </term> |
748 | <listitem><para>Implement the straightforward resolution. | |
749 | </para></listitem></varlistentry> | |
750 | ||
7fd30be8 | 751 | <varlistentry><term><ulink url="../ext/lwg-defects.html#761">761</ulink>: |
2aa5c17c PC |
752 | <emphasis>unordered_map needs an at() member function</emphasis> |
753 | </term> | |
754 | <listitem><para>In C++0x mode, add at() and at() const. | |
755 | </para></listitem></varlistentry> | |
756 | ||
7fd30be8 | 757 | <varlistentry><term><ulink url="../ext/lwg-defects.html#775">775</ulink>: |
740508be PC |
758 | <emphasis>Tuple indexing should be unsigned?</emphasis> |
759 | </term> | |
760 | <listitem><para>Implement the int -> size_t replacements. | |
761 | </para></listitem></varlistentry> | |
762 | ||
f50e1d84 | 763 | <varlistentry><term><ulink url="../ext/lwg-defects.html#776">776</ulink>: |
6a4533e5 PC |
764 | <emphasis>Undescribed assign function of std::array</emphasis> |
765 | </term> | |
766 | <listitem><para>In C++0x mode, remove assign, add fill. | |
767 | </para></listitem></varlistentry> | |
3cd54fc9 | 768 | |
7fd30be8 | 769 | <varlistentry><term><ulink url="../ext/lwg-defects.html#781">781</ulink>: |
3cd54fc9 PC |
770 | <emphasis>std::complex should add missing C99 functions</emphasis> |
771 | </term> | |
772 | <listitem><para>In C++0x mode, add std::proj. | |
773 | </para></listitem></varlistentry> | |
caa8b3c6 | 774 | |
f50e1d84 | 775 | <varlistentry><term><ulink url="../ext/lwg-defects.html#809">809</ulink>: |
caa8b3c6 PC |
776 | <emphasis>std::swap should be overloaded for array types</emphasis> |
777 | </term> | |
778 | <listitem><para>Add the overload. | |
779 | </para></listitem></varlistentry> | |
3fd29fa9 | 780 | |
f50e1d84 | 781 | <varlistentry><term><ulink url="../ext/lwg-defects.html#844">844</ulink>: |
3fd29fa9 PC |
782 | <emphasis>complex pow return type is ambiguous</emphasis> |
783 | </term> | |
784 | <listitem><para>In C++0x mode, remove the pow(complex<T>, int) signature. | |
785 | </para></listitem></varlistentry> | |
19a6a2ea PC |
786 | |
787 | <varlistentry><term><ulink url="../ext/lwg-active.html#853">853</ulink>: | |
788 | <emphasis>to_string needs updating with zero and one</emphasis> | |
789 | </term> | |
790 | <listitem><para>Update / add the signatures. | |
791 | </para></listitem></varlistentry> | |
8a165db0 BK |
792 | </variablelist> |
793 | ||
794 | </sect2> | |
795 | </sect1> | |
796 | </chapter> | |
797 | ||
798 | ||
799 | <!-- Chapter 02 : Setup --> | |
800 | <chapter id="manual.intro.setup" xreflabel="Setup"> | |
5e623d0b | 801 | <?dbhtml filename="setup.html"?> |
8a165db0 BK |
802 | <title>Setup</title> |
803 | ||
41061822 BK |
804 | <para>To transform libstdc++ sources into installed include files |
805 | and properly built binaries useful for linking to other software is | |
806 | a multi-step process. Steps include getting the sources, | |
807 | configuring and building the sources, testing, and installation. | |
808 | </para> | |
809 | ||
810 | <para>The general outline of commands is something like: | |
811 | </para> | |
812 | ||
813 | <programlisting> | |
814 | <emphasis>get gcc sources</emphasis> | |
815 | <emphasis>extract into gccsrcdir</emphasis> | |
816 | mkdir <emphasis>gccbuilddir</emphasis> | |
817 | cd <emphasis>gccbuilddir</emphasis> | |
818 | <emphasis>gccsrcdir</emphasis>/configure --prefix=<emphasis>destdir</emphasis> --other-opts... | |
819 | make | |
820 | make check | |
821 | make install | |
822 | </programlisting> | |
823 | ||
824 | <para> | |
825 | Each step is described in more detail in the following sections. | |
826 | </para> | |
827 | ||
828 | <!-- Section 01 : Prerequisites --> | |
8a165db0 | 829 | <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" |
41061822 | 830 | parse="xml" href="prerequisites.xml"> |
8a165db0 BK |
831 | </xi:include> |
832 | ||
41061822 | 833 | <!-- Section 02 : Configure --> |
8a165db0 | 834 | <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" |
41061822 | 835 | parse="xml" href="configure.xml"> |
8a165db0 BK |
836 | </xi:include> |
837 | ||
41061822 BK |
838 | <!-- Section 03 : Make --> |
839 | <sect1 id="manual.intro.setup.make" xreflabel="Make"> | |
5e623d0b | 840 | <?dbhtml filename="make.html"?> |
41061822 BK |
841 | <title>Make</title> |
842 | <para>If you have never done this before, you should read the basic | |
843 | <ulink url="http://gcc.gnu.org/install/">GCC Installation | |
844 | Instructions</ulink> first. Read <emphasis>all of them</emphasis>. | |
845 | <emphasis>Twice.</emphasis> | |
846 | </para> | |
847 | ||
848 | <para>Then type:<command>make</command>, and congratulations, you're | |
849 | started to build. | |
850 | </para> | |
851 | ||
852 | </sect1> | |
853 | ||
854 | <!-- Section 04 : Test --> | |
8a165db0 BK |
855 | <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" |
856 | parse="xml" href="test.xml"> | |
857 | </xi:include> | |
858 | </chapter> | |
859 | ||
860 | ||
861 | <!-- Chapter 03 : Using --> | |
862 | <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" | |
863 | parse="xml" href="using.xml"> | |
864 | </xi:include> | |
865 | ||
866 | </part> |