Amendment for the Embedded C++ specification Development

Version WP-AM-002,Copyright(C) 8,Aug 1997 by the Embedded C++ Technical Committee


1.Scope

This amendment defines the modifications to the text of ISO:X3J16/96-225 to produce EC++:a subset of C++ for embedded systems programming. Here is a summary of the text modifications:

2.1 Phases of translation

Because EC++ deletes templates, templates locating(phase 8) no longer makes sense.
Delete universal character name.

2.2 Basic source character set

Delete universal character name.

2.10 Identifiers

Delete universal character name.

2.11 Keywords

The C++ keywords from Table 3 shown below are not implemented in EC++, but are still reserved.
========================================================================
   +-----------------------------------------------------------+
   |catch         export     reinterpret_cast  throw   typename|
   |const_cast    mutable    static_cast       try     using   |
   |dynamic_cast  namespace  template          typeid          |
   +-----------------------------------------------------------+
========================================================================

2.13.2 Character literal

Delete universal character name.

2.13.4 String literals

Delete universal character name.

3 Basic concepts

Delete template or namespace entities. <3rd par.>
Delete template names. <6th par.>

3.1 Declarations and definitions

Delete using-declaration and using-directive. <2nd par.>
Delete examples of namespace definition and using declaration. <3rd par.>

3.2 One definition rule

Delete template definition. <1st par.>
Because EC++ deletes runtime type identification, the description related to typeid no longer makes sense. <2nd and 4th par.>
Because EC++ deletes type conversion operators, the descriptions related to dynamic_cast and static_cast conversion no longer make sense. <4th par.>
Because EC++ deletes templates, the descriptions related to template no longer make sense. <5th par.>

3.3 Declarative regions and scopes

Because EC++ deletes namespaces, there is no using-directives. <3rd par.>

3.3.1 Point of declaration

Because EC++ deletes namespaces, namespace scope means global scope.
<5th and 6th par.>
Because EC++ deletes templates, the 7th paragraph no longer makes sense.

3.3.2 Local scope

Because EC++ deletes exceptions, a function never has a function try-block.<2nd par.>
Because EC++ deletes exceptions, the 3rd paragraph no longer makes sense.

3.3.5 Namespace scope

Delete this whole subsection.

3.3.7 Name hiding

Because EC++ deletes namespaces, the 4th paragraph no longer makes sense.

3.4 Name look up

Because EC++ deletes namespaces, there is no namespace-names. <1st par.>

3.4.1 Unqualified name look up

Because EC++ deletes namespaces, the 2nd, 5th and 6th paragraph no longer makes sense.
Because EC++ deletes namespaces, delete the description related to user-declared namespace. <4th par.>
Because EC++ deletes namespaces, the latter half no longer makes sense. <footnote 27>
Because EC++ deletes namespaces, the 4th items no longer makes sense. <7th par.>
Because EC++ deletes namespaces, the latter half no longer makes sense. <footnote 29>
Because EC++ deletes namespaces, the 5th items no longer makes sense. <8th par.>
Because EC++ deletes namespaces, there is no namespace member function definitions. <9th par.>
Because EC++ deletes namespaces, namespace scope means global scope.<10th par.>
Because EC++ deletes exceptions and templates, the 12th and 13th paragraphs no longer make sense

3.4.2 Argument-dependent name lookup

Because EC++ deletes namespaces, the set of namespaces consists of only one namespace.
Because EC++ deletes templates, the 8th item no longer makes sense. <2nd par.>
Because EC++ deletes namespaces, the 3rd paragraph no longer makes sense.

3.4.3 Qualified name look up

Because EC++ deletes namespaces, namespace name never be referred to after :: scope resolution operator.
Because EC++ deletes namespaces, namespace scope means global scope. <3rd par.>
Because EC++ deletes namespaces, there is no using-directive. <4th par.>

3.4.3.2 Namespace members

Delete this whole subsection.

3.4.5 Class member access

Because EC++ deletes namespaces, there is no namespace-name. <3rd and 4th par.>
Because EC++ deletes multiple inheritances, the 3rd paragraph's example no longer makes sense.
Because EC++ deletes templates, the 5th paragraph no longer makes sense.

3.4.6 Using-directives and namespace aliases

Delete this whole subsection.

3.5 Program and linkage

Because EC++ deletes templates and namespaces, the descriptions related to template or namespace no longer make sense.
<2nd, 3rd, 4th, 6th, 7th, 8th and 9th par.>

3.6.1 Main function

Because EC++ deletes namespaces, namespace scope means global scope.

3.6.2 Initialization of non-local objects

Because EC++ deletes namespaces, namespace scope means global scope.
Because EC++ deletes exceptions, the 4th paragraph no longer makes sense.

3.6.3 Termination

Because EC++ deletes namespaces, namespace scope means global scope. <1st par.>

3.7.3 Dynamic storage duration

Because EC++ deletes exceptions and changes new function, replace allocation and deallocation functions, as follows:
========================================================================
      void* operator new(size_t);
      void* operator new[](size_t);
      void operator delete(void*);
      void operator delete[](void*);
========================================================================
Because EC++ deletes namespaces, std::size_t means size_t(global scope). <2nd par.>
Because EC++ deletes exceptions, delete std::bad_alloc. <2nd par.>

3.7.3.1 Allocation functions

Because EC++ deletes namespaces, namespace scope means global scope. <1st par.>
Because EC++ deletes templates, an allocation function never be a function template. <1st par.>
Because EC++ deletes exceptions, an allocation function does not throw an exception. <2nd and 3rd par.>
Because EC++ deletes runtime type identification and exceptions, there is no type_info nor throw expression. <4th par.>

3.7.3.2 Deallocation functions

Because EC++ deletes namespaces, namespace scope means global scope. <1st par.>
Because EC++ deletes exceptions, a deallocation function never be an instance of a function template. <2nd par.>
Because EC++ deletes namespaces, std::size_t means size_t(global scope). <2nd par.>

3.8 Object Lifetime

Because EC++ deletes type conversion operators, a pointer never be used as the operand of a static_cast nor dynamic_cast. <5th par.>
Because EC++ deletes run time type identification and type conversion operators, a lvalue never be used as the operand of a static_cast, dynamic_cast nor typeid. <6th par.>
Because EC++ deletes exceptions, the block is never exited with an exception. <8th par.>

3.9.1 Fundamental types

Delete template numeric_limits. <8th par.>

3.9.3 CV-qualifiers

Because EC++ deletes mutable, all members are non-mutable. <3rd par.>

3.10 Lvalues and rvalues

Because EC++ deletes mutable, class type never has a mutable component. <13th par.>

4.10 Pointer conversions

Because EC++ deletes multiple inheritances, there is no ambiguous base class. <3rd par.>

4.11 Pointer to member conversions

Because EC++ deletes multiple inheritances, there is no ambiguous base class. <2nd par.>

5.1 Primary expressions

Because EC++ deletes namespaces, there is no using-directive, and namespace scope means global scope. <4th par.>
Because EC++ deletes templates, replace the reduction rule for 'unqualified-id', as follows:
========================================================================
    unqualified-id:
            identifier
            operator-function-id
            conversion-function-id
            ~ class-name
========================================================================
On the reduction rule 'qualified-id : nested-name-specifier template_opt unqualified-id', template_opt is always NULL reduction.
On the reduction rule 'class-or-namespace-name', class-or-namespace-name is always class-name.
Because EC++ deletes templates, a qualified-id never includes template keywords.
Because EC++ deletes namespaces, the 9th paragraph no longer makes sense.
Because EC++ deletes templates, the 12th paragraph no longer makes sense.

5.2 Postfix expressions

Because EC++ deletes runtime type identification, replace the reduction rule for 'postfix-expression', as follows:
========================================================================
    postfix-expression:
            primary-expression
            postfix-expression [ expression ]
            postfix-expression ( expression-list_opt )
            simple-type-specifier ( expression-list_opt )
            postfix-expression . template_opt ::_opt id-expression
            postfix-expression -> template_opt ::_opt id-expression
            postfix-expression . pseudo-destructor-name
            postfix-expression -> pseudo-destructor-name
            postfix-expression ++
            postfix-expression --
========================================================================
On the reduction rule 'postfix-expression : postfix-expression . template_opt ::_opt id-expression', template_opt is always NULL reduction.
On the reduction rule 'postfix-expression : postfix-expression -> template_opt ::_opt id-expression', template_opt is always NULL reduction.

5.2.2 Function call

Because EC++ deletes exceptions, constructor and destructor never throws an exception. <4th par.>
Because EC++ deletes type conversion operators, there is no const_cast. <5th par.>

5.2.5 Class member access

Because EC++ deletes templates,postfix-expression never includes template keyword. <1st par.>
Because EC++ deletes mutable, the type of E1.E2 is always 'cq12 vq12 T'. <6th par.>

5.2.7 Dynamic cast

Because EC++ deletes runtime type identification, this whole subsection no longer makes sense.

5.2.8 Type identification

Because EC++ deletes runtime type identification, this whole subsection no longer makes sense.

5.2.9 Static cast

Because EC++ deletes runtime type identification, this whole subsection no longer makes sense.

5.2.10 Reinterpret cast

Because EC++ deletes runtime type identification, this whole subsection no longer makes sense.

5.2.11 Const cast

Because EC++ deletes runtime type identification, this whole subsection no longer makes sense.

5.3.1 Unary operator

Because EC++ deletes mutable, the last note no longer makes sense. <2nd par.>

5.3.3 Sizeof

Because EC++ deletes multiple inheritances, there is no virtual base classes. <footnote 66>

5.3.4 New

Because EC++ deletes exceptions, the 16th, 17th and 18th paragraph no longer makes sense.
Because EC++ deletes exceptions, allocation function never exits using an exception. <22th par.>

5.4 Explicit type conversion(cast notation)

Delete type conversion operators, such as dynamic_cast, static_cast, reinterpret_cast and const_cast.
Because EC++ deletes type conversion operators, the 5th paragraph no longer makes sense.

5.5 Pointer-to-member operators

Because EC++ deletes mutable, there is no pointer to member that refers to a mutable member. <5th par.>

5.16 Conditional operator

Because EC++ deletes exceptions, conditional operator never has a throw-expression operands. <2nd par.>

5.17 Assignment operators

Because EC++ deletes exceptions, replace the reduction rule for 'assignment-expression', as follows:
========================================================================
    assignment-expression:
        conditional-expression
        logical-or-expression assignment-operator assignment-expression
========================================================================

5.19 Constant expressions

Because EC++ deletes templates, integral constant-expression never involves non-type template parameters of integral. <1st par.>
Because EC++ deletes templates, address constant-expression's pointer never created using a non-type template parameter of pointer type. <4th par.>
Because EC++ deletes runtime type identification, there is no dynamic_cast. <4th and 5th par.>
Because EC++ deletes templates, there is no template parameter. <5th par.>

6 Statements

Because EC++ deletes exceptions, replace the reduction rule for 'statement', as follows:
========================================================================
    statement:
            labeled-statement
            expression-statement
            compound-statement
            selection-statement
            iteration-statement
            jump-statement
            declaration-statement
========================================================================

6.7 Declaration statement

Because EC++ deletes namespaces, namespace scope means global scope. <4th par.>
Because EC++ deletes exceptions, initialization never exits by throwing an exception. <4th par.>

6.8 Ambiguity resolution

Because EC++ deletes templates, there is no class template nor template parameter. <3rd par.>

7 Declarations

Because EC++ deletes templates and namespaces, replace the reduction rule for 'declaration' and for 'block-declaration', as follows:
========================================================================
    declaration:
            block-declaration
            function-definition
            linkage-specification

    block-declaration:
            simple-declaration
            asm-definition
========================================================================

7.1.1 Storage class specifiers

Because EC++ deletes mutable, replace the reduction rule for 'storage-class-specifier', as follows:
========================================================================
    storage-class-specifier:
            auto
            register
            static
            extern
========================================================================
Because EC++ deletes templates, there is no explicit specialization nor explicit instantiation. <1st par.>
Because EC++ deletes namespaces, namespace scope means global scope. <6th par.>
Because EC++ deletes mutable, descriptions related to mutable no longer makes sense. <8th and 9th par.>

7.1.5 Type specifiers

Because EC++ deletes templates, redundant cv-qualifiers are not introduced through the use of template type arguments. <2nd par.>

7.1.5.1 The cv-qualifiers

Because EC++ deletes mutable, all attempt to modify a const object during its lifetime results in undefined behavior. <4th par.>
In the example of cast expression, delete statements that have const_cast expressions. <5th par.'s example>
Because EC++ deletes mutable and runtime type identifications, the 6th paragraph's example no longer makes sense.

7.1.5.3 Elaborated type specifiers

Because EC++ deletes runtime type identification and templates, replace the reduction rule for 'elaborated-type-specifier', as follows:
========================================================================
    elaborated-type-specifier:
            class-key ::_opt nested-name-specifier_opt identifier
            enum ::_opt nested-name-specifier_opt identifier
========================================================================
Because EC++ deletes templates, there is no template type-parameter nor class template. <5th par.>

7.3 Namespaces

Delete this whole section.

7.5 Linkage specifications

Because EC++ deletes namespaces, namespace scope means global scope, and there are no namespace names that qualify the function name. <4th and 6th par.>
Because EC++ deletes namespaces, the 6th paragraph's example no longer makes sense.

8 Declarators

In the reduction rule 'direct-declarator : direct-declarator ( parameter-declaration-clause ) cv-qualifier-seq_opt exception- specification_opt', exception-specification_opt is always NULL reduction. <4th par.>

8.1 Type names

Because EC++ deletes runtime type identification, there is no typeid expression. <1st par.>
In the reduction rule 'direct-declarator : direct-declarator ( parameter-declaration-clause ) cv-qualifier-seq_opt exception- specification_opt', exception-specification_opt is always NULL reduction. <1st par.>

8.2 Ambiguity resolution

Because EC++ deletes templates, the 4th paragraph's example no longer makes sense.

8.3 Meaning of declarators

Because EC++ deletes templates, there is no declaration of template specializations or partial specializations. <1st par.>
Because EC++ deletes namespaces, there is no namespace. <1st par.>
Because EC++ deletes mutable, mutable specifier never applies to each declarator-id in a init-declarator-list. <2nd par.>

8.3.2 References

Because EC++ deletes templates, there is no template type argument. <1st par.>

8.3.5 Functions

Because EC++ deletes exceptions, in the form 'D1 ( parameter-declaration-clause ) cv-qualifier-seq_opt exception-specification_opt', exception-specification_opt is always NULL reduction. <1st par.>
Because EC++ deletes exceptions, there is no exception specification. <3rd par.>

8.3.6 Default arguments

Because EC++ deletes templates, default argument expression is never specified in a template parameter. <3rd par.>
Because EC++ deletes templates, all function is non-template function. <4th par.>
Because EC++ deletes namespaces, there is no namespace and function declaration is never introduced by way of a using declaration. <9th par.>

8.4 Function definitions

Because EC++ deletes exceptions, replace the reduction rule for 'function-definition', as follows:
========================================================================
    function-definition:
        decl-specifier-seq_opt declarator ctor-initializer_opt function-body
========================================================================
In the function-definition syntax 'D1 ( parameter-declaration-clause ) cv-qualifier-seq_opt exception-specification_opt', exception- specification_opt is always NULL reduction. <1st par.>
Because EC++ deletes namespaces, a function shall be defined only in global scope or class scope. <1st par.>

8.5 Initializers

Because EC++ deletes namespaces, namespace scope means global scope. <2nd par.>
Because EC++ deletes exceptions, there is no initialization that occurs in throwing an exception and handling an exception. <12th par.>
Because EC++ deletes type conversion operators, direct-initialization never includes static_cast expression. <12th par.>

8.5.3 References

Because EC++ deletes multiple inheritances, there is no ambiguous base class. <4th par.>

9 Classes

Because EC++ deletes templates, replace the reduction rule for 'class-name', as follows:
========================================================================
    class-name:
        identifier
========================================================================

9.2 Class members

Because EC++ deletes templates, replace the reduction rule for 'member-declaration', as follows:
========================================================================
    member-declarations:
            decl-specifier-seq_opt member-declarator-list_opt ;
            function-definition ;_opt
            qualified-id ;
            using-declaration
========================================================================
Because EC++ deletes templates, there is no member class template. <1st par.>
Because EC++ deletes multiple inheritances, there is no virtual base classes. <12th par.>

9.3 Member functions

Because EC++ deletes namespaces, namespace scope means global scope. <2nd and 3rd par.>
Because EC++ deletes templates, there is no explicit specializations of template member functions. <2nd par.>

9.4 Static members

Because EC++ deletes namespaces, namespace scope means global scope. <4th par.>

9.4.2 Static data members

Because EC++ deletes namespaces, namespace scope means global scope. <2nd, 4th and 5th par.>
Because EC++ deletes mutable, the 8th paragraph no longer makes sense.

9.5 Unions

Because EC++ deletes namespaces, namespace scope means global scope. <3rd par.>

9.7 Nested class declarations

Because EC++ deletes namespaces, namespace scope means global scope. <2nd and 3rd par.>

10 Derived classes

Because EC++ deletes multiple inheritances, replace the reduction rule for 'base-specifier-list' and for 'base-specifier', as follows:
========================================================================
    base-specifier-list:
            base-specifier
    base-specifier:
            ::_opt nested-name-specifier_opt class-name
========================================================================
Because EC++ deletes multiple inheritances, there is no ambiguous base class. <1st par.>

10.1 Multiple base classes

Delete this whole section.

10.2 Member name lookup

Because EC++ deletes multiple inheritances, there is no ambiguity.
Delete using-declaration for introducing base class member.
Because EC++ deletes multiple inheritances, most examples no longer make sense.
Because EC++ deletes multiple inheritances, the descriptions related to virtual base classes no longer make sense.

10.3 Virtual functions

Delete using-declaration for introducing base class member.
Because EC++ deletes multiple inheritances, examples using multiple inheritances or virtual inheritances no longer make sense.

11 Member access control

Delete using-declarations for access control. <3rd par.>

11.3 Access declarations

Delete this whole section.

11.4 Friends

Because EC++ deletes namespaces, namespace scope means global scope. <5th par.>

11.7 Multiple access

Delete this whole section.

12.1 Constructor

Because EC++ deletes multiple inheritances, the condition that trivial constructor shall not have virtual base classes no longer makes sense. <5th par.>
Because EC++ deletes exceptions, an implicitly-declared default constructor never has an exception-specification. <7th par.>

12.2 Temporary objects

Because EC++ deletes exceptions, temporaries are never created at throwing an exception and entering a handler. <1st par.>
Because EC++ deletes exceptions, the evaluation never ends in throwing an exception. <3rd par.>

12.3 Conversions

Because EC++ deletes multiple inheritances, there is no ambiguous user-defined conversions. <2nd par.>

12.3.1 Conversion by constructor

Because EC++ deletes type conversion operators, explicit constructor never be used where casts are explicitly used. <2nd par.>
Because EC++ deletes type conversion operators, example using static_cast no longer makes sense. <2nd par.'s example>

12.4 Destructors

Because EC++ deletes exceptions, an implicitly-declared destructor never has an exception-specification. <5th par.>
Because EC++ deletes multiple inheritances, most derived classes' destructor never calls the destructors for X's virtual base classes. <6th par.>
Because EC++ deletes exceptions, there is no situation due to the handling of exceptions. <10th par.>

12.6.2 Initializing bases and members

Because EC++ deletes multiple inheritances, there is no virtual base classes. <2nd par.>
Because EC++ deletes multiple inheritances, the 2nd paragraph's examples no longer make sense.
Because EC++ deletes multiple inheritances, replace the 3rd paragraph's example, as follows:
========================================================================
    struct B { B(int); /* ... */ };
    struct D : B {
        D(int);
        B b;
        const c;
    }
    D::D(int a) : B(a+1), c(a+3), b(a+4)
    { /* ... */ }
    D d(10);
========================================================================
Because EC++ deletes multiple inheritances, there is no virtual base classes.
Because EC++ deletes multiple inheritances, the 2nd item no longer makes sense. <5th par.>
Because EC++ deletes multiple inheritances, the 6th paragraph no longer makes sense.
Because EC++ deletes runtime type identification and type conversion operators, there is no typeid operator nor dynamic_cast operator. <8th and 9th par.>

12.7 Construction and destruction

Because EC++ deletes virtual inheritances, delete the example using multiple inheritances and virtual inheritances.
Because EC++ deletes runtime type identification, the 4th, 5th and 6th paragraphs no longer make sense.

12.8 Copying class objects

Because EC++ deletes templates, there is no template constructor. <2nd par. and footnote 104>
Because EC++ deletes virtual inheritances, the condition that trivial copy constructor shall not have virtual base classes is no longer necessary. <6th par.>
Because EC++ deletes multiple inheritances, there is no ambiguous copy constructor. <7th par.>
Because EC++ deletes multiple inheritances, there is no virtual base classes. <7th and 8th par.>
Because EC++ deletes exceptions, an implicitly-declared copy constructor never has an exception-specification. <7th par.>
Because EC++ deletes templates, there is no template copy assignment operator. <9th par. and footnote 107>
Because EC++ deletes virtual inheritances, the condition that trivial copy assignment operator shall not have virtual base classes is no longer necessary. <11th par.>
Because EC++ deletes exceptions, an implicitly-declared copy assignment operator never has an exception-specification. <12th par.>
Because EC++ deletes multiple inheritances, the order in the base-specifier-list no longer makes sense. <13th par.>
Because EC++ deletes multiple inheritances, the 13th paragraph's second topic no longer makes sense.

13.1 Overloadable declarations

Because EC++ deletes namespaces, there is no using-declaration nor using-directives. <1st par.>
Because EC++ deletes templates, there is no member function template declaration. <2nd par.>

13.3.1 Candidate functions and argument lists

Because EC++ deletes namespaces, there is no non-conversion functions introduced by a using-declaration. <4th par.>
Because EC++ deletes templates, the 7th paragraph no longer makes sense.

13.3.1.1 Function call syntax

Because EC++ deletes templates, postfix-expression never is the name of a function template. <1st par.>

13.3.1.1.1 Call to named function

Because EC++ deletes namespaces, there is no using-directive, and namespace scope means global scope. <footnote 114>.

13.3.3. Best Viable Function

Because EC++ deletes templates, the 2nd and 3rd conditions no longer make sense. <1st par.>

13.3.3.1.2 User-defined conversion sequences

Because EC++ deletes templates, the 3rd paragraph no longer makes sense.

13.4 Address of overloaded function

Because EC++ deletes templates, the 2nd paragraph no longer makes sense.

14 Templates

Delete this whole chapter.

15 Exception handling

Delete this whole chapter.

16.8 Predefined macro name

The name '__embedded_cplusplus' is defined when compiling a EC++ translation unit.

17 Library introduction

Not support locales, containers and iterators. Delete exception processing. <2nd par.>
Delete predefined exception classes. <3rd par.> Replace the 4th paragraph, as follows:
========================================================================
4  The  strings  components  provide  support   for   manipulating   text
   represented as sequences of type  char.
========================================================================
Delete the containers and iterators. <5th par.>
Delete numeric algorithms. Delete the valarray components. <6th par.>
Delete locales and iterators. <7th par.>

17.1 Definitions

Replace the 2nd statement of the list, as follows:
========================================================================
   -  component: A group of library entities directly related as members,
     parameters,  or  return  types.   For  example,  the class string
     and the non-member functions that  operate  on strings are referred to
     as the  string component.
========================================================================

17.2.1 Structure of each subclause

Delete 22th, 23th and 24th clauses from Table 10.

17.2.1.2 Requirements

Delete the 1st item of the list '- Template arguments'. <1st par.>
Delete containers and iterators from the 3rd item of the list. <1st par.>
Delete the 2nd and 3rd statements. <4th par.>
Delete the 2nd and 5th paragraphs.

17.2.1.3 Specifications

Delete the 3rd item of the list 'Restrictions on template arguments, if any'. <1st par.>
Replace the 5th item of the list 'Throws: ...' in the 3rd paragraph, as follows:
========================================================================
   -  Throws: the  conditions that would cause the undefined behavior
========================================================================

17.2.2.1 Type descriptions

Delete the 1st paragraph.

17.2.2.1.3 Character sequences

Delete the statement preceded by 'which is' in the 2nd item. <1st par.>

17.2.2.1.3.2 Multibyte strings

Not support libraries for multibyte strings.

17.2.2.1.3.3 Wide-character sequences

Not support libraries for wide-character strings.

17.3.1.1 Library contents

Delete 'Templates' from the 1st paragraph. Delete the 2nd paragraph.

17.3.1.2 Headers

Delete headers <algorithm>, <bitset>,<deque>, <exception>, <fstream>, <functional>,<iterator>, <limits>, <list>, <locale>, <map>, <memory>, <numeric>,<queue>, <set>, <sstream>, <stack>, <stdexcept>, <typeinfo>, <utility>,<valarray> and <vector> from Table 11.
Replace Table 11, as follows:
========================================================================
     +-----------------------------------------------------------------+
     |               <complex>        <istream>                        |
     |               <iomanip>        <new>                            |
     |               <ios>            <ostream>                        |
     |               <iosfwd>         <streambuf>                      |
     |               <iostream>       <string>                         |
     +-----------------------------------------------------------------+
========================================================================
Delete headers <cassert>, <clocale>,<csignal>,<ctime>,<cwchar> and <cwctype> from Table 12.
Replace Table 12, as follows:
========================================================================
            +--------------------------------------------------+
            |<cctype>  <ciso646> <csetjmp> <cstdio>            |
            |<cerrno>  <climits> <cstdarg> <cstdlib>           |
            |<cfloat>  <cmath>   <cstdef> <cstring>            |
            +--------------------------------------------------+
========================================================================
Because EC++ deletes namespaces, namespace scope means global scope. <4th par.>
Delete macro 'assert'. <5th par.>
Because EC++ deletes namespaces, namespace scope means global scope in footnote 153).

17.3.1.3 Freestanding implementations

Delete subclauses 18.2, 18.5 and 18.6 from Table 13.

17.3.2.1 Headers

Delete the statement preceded by 'except'. <2nd par.>

17.3.3.1 Reserved names

Delete the 1st paragraph.

17.3.3.1.2 Global names

Replace the 2nd statement of the list, as follows:
========================================================================
   - Each name  that  begins  with  an  underscore  is  reserved  to  the
     implementation  for  use  as  a  name  with file scope.
========================================================================

17.3.3.4 Replacement functions

Delete 'operator new(size_t, std::nothrow_t&)', 'operator new[](size_t, std::nothrow_t&)', 'operator delete(void *, std::nothrow_t&)' and 'operator delete(void *,std::nothrow_t&)' from the list. <2nd par.>

17.3.3.5 Handler functions

Delete both 'unexpected_handler' and 'terminate_handler' from the list. <1st par.>
Similarly delete both 'set_unexpected' and 'set_terminate' from the list. <2nd par.>
Delete ', and 18.6, Exception handling' from the 'SEE ALSO'.

17.3.3.6 Other functions

Replace the 1st paragraph, as follows:
========================================================================
1  In certain cases (replacement functions, handler functions, operations
   on  types  used  in standard library components),  the C++ Standard
   library depends  on  components  supplied  by  a  C++
   program.   If  these  components  do  not meet their requirements, the
   Standard places no requirements on the implementation.
========================================================================
Delete the 3rd and last cases from the list. <2nd par.>

17.3.3.8 Required paragraph

Replace this whole subsection, as follows:
========================================================================
1  Violation of the preconditions specified in  a  function's    Required
   behavior paragraph results in undefined behavior.
========================================================================

17.3.4 Conforming implementations

Delete ', and exceptions (17.3.4.8)' from the 1st paragraph.

17.3.4.4 Member functions

Delete the 4th paragraph.

17.3.4.7 Derived classes

A base class is never described as virtual. <2nd par.>

17.3.4.8 Restrictions on exception handling

Delete this whole subsection.

18 Language support library

Delete functions supporting start and termination of a C++ program, dynamic type identification and exception processing. <2nd par.>
Delete headers <limits>, <typeinfo>, <exception>, <ctime> and <csignal> from the Table 14.

18.2.1 Numeric limits

Delete this whole subsection.

18.3 Start and termination

Delete this whole section.

18.4 Dynamic memory management

In 'Header <new> synopsis', delete namespace 'std', namespace specifier, exception specification, struct 'nothrow_t', class 'bad_alloc' and operators 'new' and 'delete' with argument of struct 'nothrow_t'.
Replace 'Header <new> synopsis', as follows:
========================================================================
   Header <new> synopsis

     typedef void (*new_handler)();
     new_handler set_new_handler(new_handler new_P);

     void * operator new(size_t size);
     void   operator delete(void * ptr);
     void * operator new[](size_t);
     void   operator delete[](void * ptr);

     void * operator new(size_t size,void * ptr);
     void * operator new[](size_t size,void * ptr);
     void   operator delete(void * ptr, void *);
     void   operator delete[](void * ptr,void *);
========================================================================

18.4.1.1 Single-object forms

Replace declaration of function 'void *operator new(std::size_t size) throw(bad_alloc)' and the 3rd and 4th paragraphs, as follows:
========================================================================
   void* operator new(size_t size);

3  Required behavior:
     Return  a  pointer  to  dynamically  allocated  storage, or else the
     behavior is undefined.
4  Default behavior:

   --Executes  a  loop:  Within  the loop, the function first attempts to
     allocate the requested storage.  Whether the attempt involves a call
     to the Standard C library function malloc is unspecified.

   --Returns  a  pointer  to the allocated storage if the attempt is suc-
     cessful.  Otherwise, if the last argument to set_new_handler() was a
     null pointer, the behavior is undefined.

   --Otherwise, the function calls the current new_handler. If the called
     function  returns,  the  loop  repeats.

   --The  loop terminates when an attempt to allocate the requested stor-
     age is successful or when a called  new_handler  function  does  not
     return.
========================================================================
Delete declaration of function 'void *operator new(std::size_t size, const std::nothrow_t&) throw()' and the 5th,6th,7th,8th and 9th paragraphs.
Replace declaration of function 'void operator delete(void * ptr) throw()' and the 12th paragraph, as follows:
========================================================================
   void operator delete(void* ptr);
12 Required behavior: accept a value of ptr that is null or that was returned by an ear- lier call to the default operator new(size_t). ========================================================================
Delete declaration of function 'void operator delete(void *ptr, const std::nothrow_t&) throw()'.

18.4.1.2 Array forms

Replace declaration of function 'void *operator new[](std::size_t size) throw(bad_alloc)' and the 3rd paragraph, as follows:
========================================================================
   void* operator new[](size_t size);

3  Required behavior:  Same as  for    operator  new(size_t).
========================================================================
Delete declaration of function 'void *operator new[](std::size_t size, const std::nothrow_t&) throw()' and the 5th,6th,7th and 8th paragraphs.
Replace declaration of function 'void operator delete[](void *ptr) throw()', the 11th and 12th paragraphs, as follows:
========================================================================
   void operator delete[](void* ptr);

11 Required behavior:  accept a value of ptr that is  null  or  that  was
     returned  by  an  earlier  call  to  operator new[](size_t).

12 Default behavior:

   --For a null value of ptr, does nothing.

   --Any  other  value of ptr shall be a value returned earlier by a call
     to the default operator new[](size_t).203) For such a non-null value
     of ptr, reclaims storage  allocated  by  the  earlier  call  to  the
     default operator new[].
========================================================================
Delete declaration of function 'void operator delete[](void *ptr, const std::nothrow_t&) throw()'.

18.4.1.3 Placement forms

Delete namespace specifiers and exception specifications from each 'new' or 'delete' declaration. <whole par.>

18.4.2.1 Class bad_alloc

Delete this whole subsection.

18.4.2.2 Type new_handler

Replace the 2nd and 3rd paragraphs, as follows:
========================================================================
2  Required behavior:
     A new_handler shall perform one of the following:

   --make more storage available for allocation and then return;

   --otherwise the behavior is undefined.
3  Default behavior:
     The implementation's default new_handler is undefined.
========================================================================

18.4.2.3 set_new_handler

Delete exception specification of function 'set_new_handler'.

18.5 Type identification

Delete this whole section.

18.6 Exception handling

Delete this whole section.

18.7 Other runtime support

Delete system clock, signal handling and runtime environment. <1st par.>
Delete Table 21, Table 22 and Table 23.

19 Diagnostics library

Support only a global variable for error number codes. <2nd par.>
Delete headers <stdexcept> and <cassert> from the Table 24.

19.1 Exception classes

Delete this whole section.

19.2 Assertions

Delete this whole section.

20 General utilities library

Support only dynamic memory management utilities. <2nd par.>
Delete headers <utility>, <functional>, <memory> and <ctime> from the Table 27.

20.1 Requirements

Delete this whole section.

20.2 Utility components

Delete this whole section.

20.3 Function objects

Delete this whole section.

20.4 Memory

Delete 'Header <memory> synopsis'.

20.4.1 The default allocator

Delete this whole subsection.

20.4.2 Raw storage iterator

Delete this whole subsection.

20.4.3 Temporary buffers

Delete this whole subsection.

20.4.4 Specialized algorithms

Delete this whole subsection.

20.4.5 Template class auto_ptr

Delete this whole subsection.

20.5 Date and time

Delete this whole section.

21 Strings library

Delete the 1st paragraph.
Delete a character traits class. <2nd par.>
Delete headers <cwctype> and <cwchar> from the Table 36.

21.1 Character traits

Delete this whole section.

21.2 String classes

In 'Header <string> synopsis', delete namespace 'std', template class 'basic_string' and template functions.
Instead, introduce class 'string' for char type and functions for class 'string' to 'Header <string> synopsis'.
Delete the 1st and 2nd paragraphs.
Replace all 'charT' by 'char'.
Replace this whole section, as follows:
========================================================================
     Header <string> synopsis

     // subclause 21.3, string:
     class string;

     string operator + (const string &lhs,const string &rhs);
     string operator + (const char *lhs,const string &rhs);
     string operator + (char lhs,const string &rhs);
     string operator + (const string &lhs,const char *rhs);
     string operator + (const string &lhs,char rhs);

     bool operator == (const string &lhs,const string &rhs);
     bool operator == (const char *lhs,const string &rhs);
     bool operator == (const string &lhs,const char *rhs);
     bool operator != (const string &lhs,const string &rhs);
     bool operator != (const char *lhs,const string &rhs);
     bool operator != (const string &lhs,const char *rhs);

     bool operator < (const string &lhs,const string &rhs);
     bool operator < (const string &lhs,const char *rhs);
     bool operator < (const char *lhs,const string &rhs);
     bool operator > (const string &lhs,const string &rhs);
     bool operator > (const string &lhs,const char *rhs);
     bool operator > (const char *lhs,const string &rhs);

     bool operator <= (const string &lhs,const string &rhs);
     bool operator <= (const string &lhs,const char *rhs);
     bool operator <= (const char *lhs,const string &rhs);
     bool operator >= (const string &lhs,const string &rhs);
     bool operator >= (const string &lhs,const char *rhs);
     bool operator >= (const char *lhs,const string &rhs);

     // subclause 21.3.7.8:
     void swap(string &lhs, string &rhs);

     istream & operator >> (istream &is,string &str);
     ostream & operator << (ostream &os,const string &str);
     istream & getline (istream &is,string &str,char delim);
     istream & getline (istream &is,string &str);
========================================================================

21.3 Template class basic_string

Replace the title of this section by 'Class string'.
Replace all 'charT' in this section by 'char'.
Replace the 1st paragraph, as follows:
========================================================================
1  For a  char  type ,  the   class    string
   describes  objects  that  can store a sequence consisting of a varying
   number of arbitrary char objects (21).  The first element of  the
   sequence is at position zero.  Such a sequence is also called a string
   if the given char type is clear from context. Storage for the
   string is allocated and freed as necessary by the member functions  of
   class  string.
========================================================================
Delete the 2nd and 4th paragraphs.
Delete template class 'basic_string'. Instead introduce class 'string'.
Delete member functions 'get_allocator','rbegin' and 'rend'.
Replace all 'size_type' in declaration of class 'string' by 'size_t'.
Replace declaration of class 'string', as follows:
========================================================================
     class string {
     public:
     // types:
       typedef implementation defined             iterator;       // See 23.1
       typedef implementation defined             const_iterator; // See 23.1

       static const size_t npos = -1;

     // 21.3.1 construct/copy/destroy:
       explicit string(void);
       string(const string& str, size_t pos = 0, size_t n = npos);
       string(const char* s, size_t n);
       string(const char* s);
       string(size_t n, char c);
      ~string();
       string& operator=(const string& str);
       string& operator=(const char* s);
       string& operator=(char c);

     // 21.3.2 iterators:
       iterator       begin();
       const_iterator begin() const;
       iterator       end();
       const_iterator end() const;

     // 21.3.3 capacity:
       size_t size() const;
       size_t length() const;
       size_t max_size() const;
       void resize(size_t n, char c);
       void resize(size_t n);
       size_t capacity() const;
       void reserve(size_t res_arg = 0);
       void clear();
       bool empty() const;

     // 21.3.4 element access:
       const char & operator[](size_t pos) const;
       char &       operator[](size_t pos);
       const char & at(size_t n) const;
       char &       at(size_t n);

     // 21.3.5 modifiers:
       string& operator+=(const string& str);
       string& operator+=(const char* s);
       string& operator+=(char c);
       string& append(const string& str);
       string& append(const string& str, size_t pos, size_t n);
       string& append(const char* s, size_t n);
       string& append(const char* s);
       string& append(size_t n, char c);

       string& assign(const string&);
       string& assign(const string& str, size_t pos, size_t n);
       string& assign(const char* s, size_t n);
       string& assign(const char* s);
       string& assign(size_t n, char c);

       string& insert(size_t pos1, const string& str);
       string& insert(size_t pos1, const string& str,
                           size_t pos2, size_t n);
       string& insert(size_t pos, const char* s, size_t n);
       string& insert(size_t pos, const char* s);
       string& insert(size_t pos, size_t n, char c);
       iterator insert(iterator p, char c = char());
       void     insert(iterator p, size_t n, char c);

       string& erase(size_t pos = 0, size_t n = npos);
       iterator erase(iterator position);
       iterator erase(iterator first, iterator last);

       string& replace(size_t pos1, size_t n1, const string& str);
       string& replace(size_t pos1, size_t n1, const string& str,
                            size_t pos2, size_t n2);
       string& replace(size_t pos, size_t n1, const char* s, size_t n2);
       string& replace(size_t pos, size_t n1, const char* s);
       string& replace(size_t pos, size_t n1, size_t n2, char c);
       string& replace(iterator i1, iterator i2, const string& str);
       string& replace(iterator i1, iterator i2, const char* s, size_t n);
       string& replace(iterator i1, iterator i2, const char* s);
       string& replace(iterator i1, iterator i2, size_t n, char c);

       size_t copy(char* s, size_t n, size_t pos = 0) const;
       void swap(string&);

     // 21.3.6 string operations:
       const char* c_str() const;  // explicit
       const char* data() const;

       size_t find (const string& str, size_t pos = 0) const;
       size_t find (const char* s, size_t pos, size_t n) const;
       size_t find (const char* s, size_t pos = 0) const;
       size_t find (char c, size_t pos = 0) const;
       size_t rfind(const string& str, size_t pos = npos) const;
       size_t rfind(const char* s, size_t pos, size_t n) const;
       size_t rfind(const char* s, size_t pos = npos) const;
       size_t rfind(char c, size_t pos = npos) const;

       size_t find_first_of(const string& str, size_t pos = 0) const;
       size_t find_first_of(const char* s, size_t pos, size_t n) const;
       size_t find_first_of(const char* s, size_t pos = 0) const;
       size_t find_first_of(char c, size_t pos = 0) const;
       size_t find_last_of (const string& str, size_t pos = npos) const;
       size_t find_last_of (const char* s, size_t pos, size_t n) const;
       size_t find_last_of (const char* s, size_t pos = npos) const;
       size_t find_last_of (char c, size_t pos = npos) const;

       size_t find_first_not_of(const string& str, size_t pos = 0) const;
       size_t find_first_not_of(const char* s, size_t pos, size_t n) const;
       size_t find_first_not_of(const char* s, size_t pos = 0) const;
       size_t find_first_not_of(char c, size_t pos = 0) const;
       size_t find_last_not_of (const string& str, size_t pos = npos) const;
       size_t find_last_not_of (const char* s, size_t pos, size_t n) const;
       size_t find_last_not_of (const char* s, size_t pos = npos) const;
       size_t find_last_not_of (char c, size_t pos = npos) const;

       string substr(size_t pos = 0, size_t n = npos) const;
       int compare(const string& str) const;
       int compare(size_t pos1, size_t n1, const string& str) const;
       int compare(size_t pos1, size_t n1, const string& str,
                   size_t pos2, size_t n2) const;
       int compare(const char* s) const;
       int compare(size_t pos1, size_t n1,
                   const char* s, size_t n2 = npos) const;
     };
========================================================================

21.3.1 basic_string constructors

Replace the title of this subsection by 'string constructors'.
Replace all 'basic_string' in this subsection by 'string'.
Replace all 'size_type' in this subsection by 'size_t'.
Delete the 1st paragraph.
Delete the sixth constructor with argument 'InputIterator'.
Replace all 'traits::length()' in this subsection by '::strlen()'.
Replace all 'charT' by 'char'.
Regarding the first constructor, replace only declaration, as follows:
========================================================================
   explicit string(void);
========================================================================
Replace the title of Table 38 by 'string() effects'.
Regarding the second constructor, replace declaration and the 4th paragraph, as follows:
========================================================================
   string(const string& str, size_t pos = 0, size_t n = npos);

4  Throws:
     if pos > str.size(), then the behavior is undefined.
========================================================================
Replace the title of Table 39 by 'string(string,size_t,size_t) effects'.
Regarding the third constructor, replace declaration and the 7th paragraph, as follows:
========================================================================
   string(const char* s, size_t n);

7  Throws: if n == pos, then the behavior is undefined.
========================================================================
Replace the title of Table 40 by 'string(const char*,size_t) effects'.
Regarding the forth constructor, replace only declaration, as follows:
========================================================================
   string(const char* s);
========================================================================
Replace the title of Table 41 by 'string(const char*) effects'.
Replace 'char-like' by 'char'.
Regarding the fifth constructor, replace declaration and the 13th paragraph, as follows:
========================================================================
   string(size_t n, char c);

13 Throws:
     if n == npos, then the behavior is undefined.
========================================================================
Replace the title of Table 42 by 'string(size_t,char) effects'. Regarding the first assignment operator, replace only declaration, as follows:
========================================================================
   string&  operator=(const string& str);
========================================================================
Replace the title of Table 44 by 'operator=(const string&) effects'.
Replace 'traits::length()' by '::strlen()'. <20th par.>
Replace the other assignment operators, as follows:
========================================================================
   string&  operator=(const char* s);

19 Returns:
     *this = string(s).
20 Notes:
     Uses ::strlen().

   string& operator=(char c);

21 Returns:
     *this = string(1,c).
========================================================================

21.3.2 basic_string iterator support

Replace the title of this subsection by 'string iterator support'.
Delete member functions 'rbegin' and 'rend'.

21.3.3 basic_string capacity

Replace the title of this subsection by 'string capacity'.
Replace all 'size_type' by 'size_t'.
Replace all 'charT' by 'char'.
Replace 'traits::length()' by '::strlen()'.
Replace 'char-like' by 'char'. <1st par.>
Replace 'basic_string' by 'string'. <9th par.>
Regarding the 1st function 'resize', replace the 5th paragraph, as follows:
========================================================================
5  Throws:
     if n > max_size(), then the behavior is undefined.
========================================================================

21.3.4 basic_string element access

Replace the title of this subsection by 'string element access'.
Replace 'traits::eos()' by '\0'. <2nd par.>
Replace all 'size_type' by 'size_t'.
Replace declaration of functions and the 4th paragraph, as follows:
========================================================================
   const char & operator[](size_t pos) const;
   char &       operator[](size_t pos);

   const char & at(size_t n) const;
   char &       at(size_t n);

4  Throws:
     if pos >= size(), then the behavior is undefined.
========================================================================

21.3.5 basic_string modifiers

Replace the title of this subsection by 'string modifiers'.

21.3.5.1 basic_string::operator+=

Replace the title of this subsection by 'string::operator+='.
Replace 'traits::length()' by '::strlen()'.
Replace all 'charT' by 'char'.
Replace this whole subsection, as follows:
========================================================================
   string&   operator+=(const string& str);

1  Returns:  append(str).

   string& operator+=(const char* s);

2  Returns:  *this += string(s).
3  Notes:  Uses ::strlen().

   string& operator+=(char c);

4  Returns:  *this += string(1,c).
========================================================================

21.3.5.2 basic_string::append

Replace the title of this subsection by 'string::append'.
Delete the last member function 'append'.
Replace 'traits::length()' by '::strlen()'. <8th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 3rd,4th,6th,7th,8th and 9th paragraphs, as follows:
========================================================================
   string& append(const string& str);

   string& append(const string& str, size_t pos, size_t n);

3  Throws:   if  pos > str.size(), then the behavior is undefined.
4  Effects:  Determines the effective length rlen of the string to append
     as the smaller of n and  str.size() - pos.  If  size() >= npos - rlen,
     then the behavior is undefined.
     Otherwise, the function replaces the string  controlled  by    *this
     with  a string of length  size() + rlen whose first  size() elements
     are a copy of the original string controlled by    *this  and  whose
     remaining  elements are a copy of the initial elements of the string
     controlled by str beginning at position pos.

   string& append(const char* s, size_t n);

6  Returns:   append(string(s,n)).

   string& append(const char* s);

7  Returns:   append(string(s)).
8  Notes:  Uses  ::strlen().

   string& append(size_t n, char c);

9  Returns:   append(string(n,c)).
========================================================================

21.3.5.3 basic_string::assign

Replace the title of this subsection by 'string::assign'.
Delete the last member function 'assign'.
Replace 'traits::length()' by '::strlen()'. <8th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 3rd,6th,7th,8th and 9th paragraphs, as follows:
========================================================================
   string& assign(const string& str);

   string& assign(const string& str, size_t pos, size_t n);

3  Throws:   if  pos > str.size(), then the behavior is undefined.

   string& assign(const char* s, size_t n);

6  Returns:   assign(string(s,n)).

   string& assign(const char* s);

7  Returns:   assign(string(s)).
8  Notes:  Uses  ::strlen().

   string& assign(size_t n, char c);

9  Returns:   assign(string(n,c)).
========================================================================

21.3.5.4 basic_string::insert

Replace the title of this subsection by 'string::insert'.
Delete the last member function 'insert'. Replace 'traits::length()' by '::strlen()'. <8th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 3rd,4th,6th,7th,8th and 9th paragraphs, as follows:
========================================================================
   string& insert(size_t pos1, const string& str);

   string& insert(size_t pos1, const string& str, size_t pos2, size_t n);

3  Throws:   if  pos1 > size() or  pos2 > str.size(), the behavior is
     undefined.
4  Effects:  Determines the effective length rlen of the string to insert
     as  the  smaller  of  n  and    str.size()  -  pos2.   Then  the
     behavior is undefined if  size() >= npos - rlen.
     Otherwise, the function replaces the string  controlled  by    *this
     with a string of length  size() + rlen whose first pos1 elements are
     a copy of the initial elements of the original string controlled by
     *this,  whose  next  rlen elements are a copy of the elements of the
     string controlled by str  beginning  at  position  pos2,  and  whose
     remaining  elements  are  a  copy  of  the remaining elements of the
     original string controlled by  *this.

   string& insert(size_t pos, const char* s, size_t n);

6  Returns:   insert(pos,string(s,n)).

   string& insert(size_t pos, const char* s);

7  Returns:   insert(pos,string(s)).
8  Notes:  Uses  ::strlen().

   string& insert(size_t pos, size_t n, char c);

9  Returns:   insert(pos,string(n,c)).

   iterator insert(iterator p, char c);

   void insert(iterator p, size_t n, char c);
========================================================================

21.3.5.5 basic_string::erase

Replace the title of this subsection by 'string::erase'.
Replace all 'size_type' by 'size_t'.
Replace declarations of each function and the 2nd paragraph, as follows:
========================================================================
   string& erase(size_t pos = 0, size_t n = npos);

2  Throws:   if pos   > size(), then the behavior is undefined.

   iterator erase(iterator p);

   iterator erase(iterator first, iterator last);
========================================================================

21.3.5.6 basic_string::replace

Replace the title of this subsection by 'string::replace'.
Delete the last member function 'replace'. Replace 'traits::length()' by '::strlen()'. <8th and 17th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 3rd,4th,6th,7th,8th,9th,14th,16th,17th and 18th paragraphs, as follows:
========================================================================
   string& replace(size_t pos1, size_t n1, const string& str);

   string& replace(size_t pos1, size_t n1,
             const string& str, size_t pos2, size_t n2);

3  Throws:   if  pos1 > size() or  pos2 > str.size(), then the behavior
     is undefined.
4  Effects:  Determines the effective length xlen of  the  string  to  be
     removed as the smaller of n1 and  size() - pos1.  It also determines
     the effective length rlen of  the  string  to  be  inserted  as  the
     smaller of n2 and  str.size() - pos2 .
     If  size() - xlen >= npos - rlen, then the behavior is undefined.
     Otherwise, the function replaces the string  controlled  by    *this
     with  a  string  of  length    size() - xlen + rlen whose first pos1
     elements are a copy of the initial elements of the  original  string
     controlled  by    *this,  whose next rlen elements are a copy of the
     initial elements of  the  string  controlled  by  str  beginning  at
     position  pos2,  and  whose  remaining  elements  are  a copy of the
     elements of the original string controlled by   *this  beginning  at
     position  pos1 + xlen.

   string& replace(size_t pos, size_t n1, const char* s, size_t n2);

6  Returns:   replace(pos,n1,string(s,n2)).

   string& replace(size_t pos, size_t n1, const char* s);

7  Returns:   replace(pos,n1,string(s)).
8  Notes:  Uses  ::strlen().

   string& replace(size_t pos, size_t n1, size_t n2, char c);

9  Returns:   replace(pos,n1,string(n2,c)).

   string& replace(iterator i1, iterator i2, const string& str);

   string& replace(iterator i1, iterator i2, const char* s, size_t n);

14 Returns:   replace(i1,i2,string(s,n)).

   string& replace(iterator i1, iterator i2, const char* s);

16 Returns:   replace(i1,i2,string(s)).
17 Notes:  Length change:  ::strlen(s) - (i2 - i1).
     Uses  ::strlen().

   string& replace(iterator i1, iterator i2, size_t n, char c);

18 Returns:   replace(i1,i2,string(n,c)).
========================================================================

21.3.5.7 basic_string::copy

Replace the title of this subsection by 'string::copy'.
Replace 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declaration of 'copy' and the 2nd paragraph, as follows:
========================================================================
   size_t copy(char* s, size_t n, size_t pos = 0) const;

2  Throws:  if pos > size(), then the behavior is undefined.
========================================================================

21.3.5.8 basic_string::swap

Replace the title of this subsection by 'string::swap'.
Replace only declaration of 'swap', as follows:
========================================================================
   void swap(string& s);
========================================================================

21.3.6 basic_string string operations

Replace the title of this subsection by 'string string operations'.
Delete member function 'get_allocator'.
Replace all 'charT' by 'char'.
Replace all 'traits::eos()' by '\0'.
Replace all 'basic_string' by 'string'.

21.3.6.1 basic_string::find

Replace the title of this subsection by 'string::find'.
Delete the 3rd paragraph.
Replace 'traits::length()' by '::strlen()'. <6th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 4th,5th,6th and 7th paragraphs, as follows:
========================================================================
   size_t find(const string& str, size_t pos = 0) const;

   size_t find(const char* s, size_t pos, size_t n) const;

4  Returns:   find(string(s,n),pos).

   size_t find(const char* s, size_t pos = 0) const;

5  Returns:   find(string(s),pos).
6  Notes:  Uses  ::strlen().

   size_t find(char c, size_t pos = 0) const;

7  Returns:   find(string(1,c),pos).
========================================================================

21.3.6.2 basic_string::rfind

Replace the title of this subsection by 'string::rfind'.
Delete the 3rd paragraph.
Replace 'traits::length()' by '::strlen()'. <6th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 4th,5th,6th and 7th paragraphs, as follows:
========================================================================
   size_t rfind(const string& str, size_t pos = npos) const;

   size_t rfind(const char* s, size_t pos, size_t n) const;

4  Returns:   rfind(string(s,n),pos).

   size_t rfind(const char* s, size_t pos = npos) const;

5  Returns:   rfind(string(s),pos).
6  Notes:  Uses  ::strlen().

   size_t rfind(char c, size_t pos = npos) const;

7  Returns:   rfind(string(1,c),pos).
========================================================================

21.3.6.3 basic_string::find_first_of

Replace the title of this subsection by 'string::find_first_of'.
Delete the 3rd paragraph.
Replace 'traits::length()' by '::strlen()'. <6th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 4th,5th,6th and 7th paragraphs, as follows:
========================================================================
   size_t find_first_of(const string& str, size_t pos = 0) const;

   size_t find_first_of(const char* s, size_t pos, size_t n) const;

4  Returns:
     find_first_of(string(s,n),pos).

   size_t find_first_of(const char* s, size_t pos = 0) const;

5  Returns:   find_first_of(string(s),pos).
6  Notes:  Uses  ::strlen().

   size_t find_first_of(char c, size_t pos = 0) const;

7  Returns:
     find_first_of(string(1,c),pos).
========================================================================

21.3.6.4 basic_string::find_last_of

Replace the title of this subsection by 'string::find_last_of'.
Delete the 3rd paragraph.
Replace 'traits::length()' by '::strlen()'. <6th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 4th,5th,6th and 7th paragraphs, as follows:
========================================================================
   size_t find_last_of(const string& str, size_t pos = npos) const;

   size_t find_last_of(const char* s, size_t pos, size_t n) const;

4  Returns:
     find_last_of(string(s,n),pos).

   size_t find_last_of(const char* s, size_t pos = npos) const;

5  Returns:   find_last_of(string(s),pos).
6  Notes:  Uses  ::strlen().

   size_t find_last_of(char c, size_t pos = npos) const;

7  Returns:
     find_last_of(string(1,c),pos).
========================================================================

21.3.6.5 basic_string::find_first_not_of

Replace the title of this subsection by 'string::find_first_not_of'.
Delete the 3rd paragraph.
Replace 'traits::length()' by '::strlen()'. <6th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 4th,5th,6th and 7th paragraphs, as follows:
========================================================================
   size_t find_first_not_of(const string& str, size_t pos = 0) const;

   size_t find_first_not_of(const char* s, size_t pos, size_t n) const;

4  Returns:
     find_first_not_of(string(s,n),pos).

   size_t find_first_not_of(const char* s, size_t pos = 0) const;

5  Returns:
     find_first_not_of(string(s),pos).
6  Notes:  Uses  ::strlen().

   size_ find_first_not_of(char c, size_t pos = 0) const;

7  Returns:
     find_first_not_of(string(1,c),pos).
========================================================================

21.3.6.6 basic_string::find_last_not_of

Replace the title of this subsection by 'string::find_last_not_of'.
Delete the 3rd paragraph.
Replace 'traits::length()' by '::strlen()'. <6th par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 4th,5th,6th and 7th paragraphs, as follows:
========================================================================
   size_t find_last_not_of(const string& str, size_t pos = npos) const;

   size_t find_last_not_of(const char* s, size_t pos, size_t n) const;

4  Returns:
     find_last_not_of(string(s,n),pos).

   size_t find_last_not_of(const char* s, size_t pos = npos) const;

5  Returns:
     find_last_not_of(string(s),pos).
6  Notes:  Uses  ::strlen().

   size_t find_last_not_of(char c, size_t pos = npos) const;

7  Returns:
     find_last_not_of(string(1,c),pos).
========================================================================

21.3.6.7 basic_string::substr

Replace the title of this subsection by 'string::substr'.
Replace both 'size_type' by 'size_t'.
Replace declarations of 'substr' and the 2nd and 4th paragraphs, as follows:
========================================================================
   string substr(size_t pos = 0, size_t n = npos) const;

2  Throws:   if  pos > size(), then the behavior is undefined.

4  Returns:   string(data()+pos,rlen).
========================================================================

21.3.6.8 basic_string::compare

Replace the title of this subsection by 'string::compare'.
Replace 'traits::compare()' by '::memcmp()'. <1st par.>
Replace all 'charT' by 'char' and all 'size_type' by 'size_t'.
Replace declarations of each function and the 1st,3rd,4th,5th and 6th paragraphs, as follows:
========================================================================
   int compare(const string& str)

1  Effects:  Determines the effective length   rlen  of  the  strings  to
     compare  as  the  smallest of  size() and  str.size().  The function
     then compares the two strings by  calling    ::memcmp(data(),
     str.data(), rlen).

   int compare(size_t pos1, size_t n1, const string& str) const;

3  Returns:   string(*this,pos1,n1).compare(str) .

   int compare(size_t pos1, size_t n1, const string& str,
               size_t pos2, size_t n2) const;

4  Returns:   string(*this,pos1,n1).compare(string(str,pos2,n2)) .

   int compare(const char *s) const;

5  Returns:   this->compare(string(s)).

   int compare(size_t pos, size_t n1, char *s, size_t n2 = npos) const;

6  Returns:   string(*this,pos,n1).compare(string(s,n2))
========================================================================

21.3.7 basic_string non-member functions

Replace the title of this subsection by 'string non-member functions'.

21.3.7.1 operator+

Replace 'traits::length()' by '::strlen()'. <3rd and 6th par.>
Replace all 'charT' by 'char'.
Replace this whole subsection, as follows:
========================================================================
   string operator+(const string& lhs, const string& rhs);

1  Returns:   string(lhs).append(rhs)

   string operator+(const char* lhs, const string& rhs);

2  Returns:   string(lhs) + rhs.
3  Notes:  Uses  ::strlen().

   string operator+(char lhs, const string& rhs);

4  Returns:   string(1,lhs) + rhs.

   string operator+(const string& lhs, const char* rhs);

5  Returns:   lhs + string(rhs).
6  Notes:  Uses  ::strlen().

   string operator+(const string& lhs, char rhs);

7  Returns:   lhs + string(1,rhs).
========================================================================

21.3.7.2 operator==

Replace 'traits::length()' by '::strlen()'. <4th par.>
Replace all 'charT' by 'char'.
Replace declarations of each function and the 2nd,3rd and 4th paragraphs, as follows:
========================================================================
   bool operator==(const string& lhs, const string& rhs);

   bool operator==(const char* lhs, const string& rhs);

2  Returns:   string(lhs) == rhs.

   bool operator==(const string& lhs, const char* rhs);

3  Returns:   lhs == string(rhs).
4  Notes:  Uses  ::strlen().
========================================================================

21.3.7.3 operator!=

Replace 'traits::length()' by '::strlen()'. <4th par.>
Replace all 'charT' by 'char'.
Replace declaration of each functions and the 2nd,3rd and 4th paragraphs, as follows:
========================================================================
   bool operator!=(const string& lhs, const string& rhs);

   bool operator!=(const char* lhs, const string& rhs);

2  Returns:   string(lhs) != rhs.

   bool operator!=(const string& lhs, const char* rhs);

3  Returns:   lhs != string(rhs).
4  Notes:  Uses  ::strlen().
========================================================================

21.3.7.4 operator<

Replace all 'charT' by 'char'.
Replace declarations of each function and the 2nd and 3rd paragraphs, as follows:
========================================================================
   bool operator< (const string& lhs, const string& rhs);

   bool operator< (const char* lhs, const string& rhs);

2  Returns:   string(lhs) < rhs.

   bool operator< (const string& lhs, const char* rhs);

3  Returns:   lhs < string(rhs).
========================================================================

21.3.7.5 operator>

Replace all 'charT' by 'char'.
Replace declarations of each function and the 2nd and 3rd paragraphs, as follows:
========================================================================
   bool operator> (const string& lhs, const string& rhs);

   bool operator> (const char* lhs, const string& rhs);

2  Returns:   string(lhs) > rhs.

   bool operator> (const string& lhs, const char* rhs);

3  Returns:   lhs > string(rhs).
========================================================================

21.3.7.6 operator<=

Replace all 'charT' by 'char'.
Replace declarations of each function and the 2nd and 3rd paragraphs, as follows:
========================================================================
   bool operator<=(const string& lhs, const string& rhs);

   bool operator<=(const char* lhs, const string& rhs);

2  Returns:   string(lhs) <= rhs.

   bool operator<=(const string& lhs, const char* rhs);
========================================================================

21.3.7.7 operator>=

Replace all 'charT' by 'char'.
Replace declarations of each function and the 2nd and 3rd paragraphs, as follows:
========================================================================
   bool operator>=(const string& lhs, const string& rhs);

   bool operator>=(const char* lhs, const string& rhs);

2  Returns:   string(lhs) >= rhs.

   bool operator>=(const string& lhs, const char* rhs);

3  Returns:   lhs >= string(rhs).
========================================================================

21.3.7.8 swap

Replace only declaration of 'swap', as follows:
========================================================================
   void swap(string& lhs, string& rhs);
========================================================================

21.3.7.9 Inserters and extractors

Replace 'charT' by 'char'.
Replace this whole subsection, as follows:
========================================================================
   21.3.7.9  Inserters and extractors                     [lib.string.io]

   istream& operator>>(istream& is, string& str);

1  Effects:  Begins by constructing a  sentry  object  k  as  if  k  were
     constructed  by    istream::sentry  k(is).   If
     bool(k) is true, it calls  str.erase() and then extracts  characters
     from  is  and appends them to str as if by calling  str.append(1,c).
     If  is.width() is  greater  than  zero,  the  maximum  number  n  of
     characters  appended is  is.width(); otherwise n is  str.max_size().
     Characters are extracted and appended until  any  of  the  following
     occurs:

   -  n characters are stored;

   - end-of-file occurs on the input sequence;

   -  isspace(c) is true for the next available input character
     c.   After the last character (if any) is extracted,  is.width(0) is
     called and the  sentry object k is destroyed.
2  Returns:   is

   ostream& operator<<(ostream& os, const string& str);

3  Effects:  Begins by constructing a  sentry  object  k  as  if  k  were
     constructed  by    ostream::sentry  k(os).   If
     bool(k) is true, inserts characters as if by  calling    os.rdbuf()-
     >sputn(str.data(),   n);   then  calls    os.width(0).   If  the  call
     to  sputn fails, calls  os.setstate(ios_base::failbit).
4  Returns:   os

   istream& getline(istream& is, string& str, char delim);

5  Effects:  Begins by constructing  a    sentry  object  k  as  if  by
     istream::sentry  k(is).  If  bool(k) is true, it
     calls  str.erase() and then extracts characters from is and  appends
     them  to  str  as  if  by  calling  str.append(1,c) until any of the
     following occurs:

   - end-of-file occurs on the  input  sequence  (in  which  case,  the
     getline function calls  is.setstate(ios_base::eofbit)).

   -  c == delim for the next available input  character    c  (in  which
     case,  c is extracted but not appended) (27.4.5.3)

   -  str.max_size() characters are stored (in which case,  the  function
     calls  is.setstate(ios_base::failbit) (27.4.5.3)

6  The conditions are tested in the order shown.  In any case, after  the
   last character is extracted, the  sentry object k is destroyed.

7  If   the   function   extracts    no    characters,    it    calls
   is.setstate(ios_base::failbit).
8  Returns:  is.

   istream& getline(istream& is, string& str)

9  Returns:   getline(is,str,'\n')
========================================================================

21.4 Null-terminated sequence utilities

Delete headers <cwctype> and <cwchar>.
Delete functions 'strcoll','strerror' and 'strxfrm' from header <cstring>.
Delete functions 'mblen','mbstowcs','mbtowc','wctomb' and 'wcstombs' from header <sctdlib>.

22 Localization library

Delete this whole chapter.

23 Containers library

Delete this whole chapter.

24 Iterators library

Delete this whole chapter.

25 Algorithms library

Delete containers. <1st par.>
Support only algorithms from the ISO C library. <2nd par.>
Delete header <algorithm> from the Table 78.
Delete 'Header <algorithm> synopsis' and the 3rd,4th,5th,6th,7th,8th and 9th paragraphs.

25.1 Non-modifying sequence operations

Delete this whole section.

25.2 Mutating sequence operations

Delete this whole section.

25.3 Sorting and related operations

Delete this whole section.

26 Numerics library

Support only complex number types and facilities included from the ISO C library. <2nd par.>
Delete headers <valarray> and <numeric> from the Table 80.

26.1 Numeric type requirements

Delete this whole section.

26.2 Complex numbers

Replace the 1st paragraph, as follows:
========================================================================
1  The header <complex> defines 'float_complex', 'double_complex', and
   numerous  functions for them.
========================================================================
Delete the 2nd paragraph.

26.2.1 Header <complex> synopsis

Delete namespace 'std' and template class 'complex'.
Instead introduce 'float_complex' for float type and 'double_complex' for double type.
Replace this whole subsection, as follows:
========================================================================
     class float_complex;
     class double_complex;

     // 26.2.6 operators:
     float_complex operator+(const float_complex&, const float_complex&);
     float_complex operator+(const float_complex&, const float&);
     float_complex operator+(const float&, const float_complex&);
     float_complex operator-(const float_complex&, const float_complex&);
     float_complex operator-(const float_complex&, const float&);
     float_complex operator-(const float&, const float_complex&);
     float_complex operator*(const float_complex&, const float_complex&);
     float_complex operator*(const float_complex&, const float&);
     float_complex operator*(const float&, const float_complex&);
     float_complex operator/(const float_complex&, const float_complex&);
     float_complex operator/(const float_complex&, const float&);
     float_complex operator/(const float&, const float_complex&);
     float_complex operator+(const float_complex&);
     float_complex operator-(const float_complex&);
     bool operator==(const float_complex&, const float_complex&);
     bool operator==(const float_complex&, const float&);
     bool operator==(const float&, const float_complex&);
     bool operator!=(const float_complex&, const float_complex&);
     bool operator!=(const float_complex&, const float&);
     bool operator!=(const float&, const float_complex&);
     istream&  operator>>(istream&, float_complex&);
     ostream&  operator<<(ostream&, const float_complex&);

     double_complex operator+(const double_complex&, const double_complex&);
     double_complex operator+(const double_complex&, const double&);
     double_complex operator+(const double&, const double_complex&);
     double_complex operator-(const double_complex&, const double_complex&);
     double_complex operator-(const double_complex&, const double&);
     double_complex operator-(const double&, const double_complex&);
     double_complex operator*(const double_complex&, const double_complex&);
     double_complex operator*(const double_complex&, const double&);
     double_complex operator*(const double&, const double_complex&);
     double_complex operator/(const double_complex&, const double_complex&);
     double_complex operator/(const double_complex&, const double&);
     double_complex operator/(const double&, const double_complex&);
     double_complex operator+(const double_complex&);
     double_complex operator-(const double_complex&);
     bool operator==(const double_complex&, const double_complex&);
     bool operator==(const double_complex&, const double&);
     bool operator==(const double&, const double_complex&);
     bool operator!=(const double_complex&, const double_complex&);
     bool operator!=(const double_complex&, const double&);
     bool operator!=(const double&, const double_complex&);
     istream&  operator>>(istream&, double_complex&);
     ostream&  operator<<(ostream&, const double_complex&);

     // 26.2.7 values:
     float real(const float_complex&);
     float imag(const float_complex&);
     float abs(const float_complex&);
     float arg(const float_complex&);
     float norm(const float_complex&);
     float_complex conj(const float_complex&);
     float_complex polar(const float&, const float&);

     double real(const double_complex&);
     double imag(const double_complex&);
     double abs(const double_complex&);
     double arg(const double_complex&);
     double norm(const double_complex&);
     double_complex conj(const double_complex&);
     double_complex polar(const double&, const double&);

     // 26.2.8 transcendentals:
     float_complex cos  (const float_complex&);
     float_complex cosh (const float_complex&);
     float_complex exp  (const float_complex&);
     float_complex log  (const float_complex&);
     float_complex log10(const float_complex&);

     float_complex pow(const float_complex&, int);
     float_complex pow(const float_complex&, const float&);
     float_complex pow(const float_complex&, const float_complex&);
     float_complex pow(const float&, const float_complex&);
     float_complex sin  (const float_complex&);
     float_complex sinh (const float_complex&);
     float_complex sqrt (const float_complex&);
     float_complex tan  (const float_complex&);
     float_complex tanh (const float_complex&);

     double_complex cos  (const double_complex&);
     double_complex cosh (const double_complex&);
     double_complex exp  (const double_complex&);
     double_complex log  (const double_complex&);
     double_complex log10(const double_complex&);

     double_complex pow(const double_complex&, int);
     double_complex pow(const double_complex&, const double&);
     double_complex pow(const double_complex&, const double_complex&);
     double_complex pow(const double&, const double_complex&);
     double_complex sin  (const double_complex&);
     double_complex sinh (const double_complex&);
     double_complex sqrt (const double_complex&);
     double_complex tan  (const double_complex&);
     double_complex tanh (const double_complex&);
========================================================================

26.2.2 Template class complex

Delete this whole subsection.

26.2.3 complex specializations

Replace 'complex<float>' by 'float_complex'.
Replace 'complex<double>' by 'double_complex'.
Replace this whole subsection, as follows:
========================================================================
     class float_complex {
     public:
       typedef float value_type;

       float_complex(float re = 0.0f, float im = 0.0f);
       explicit float_complex(const double_complex&);
       float real() const;
       float imag() const;

       float_complex& operator= (float);
       float_complex& operator+=(float);
       float_complex& operator-=(float);
       float_complex& operator*=(float);
       float_complex& operator/=(float);

       float_complex& operator=(const float_complex&);
       float_complex& operator+=(const float_complex&);
       float_complex& operator-=(const float_complex&);
       float_complex& operator*=(const float_complex&);
       float_complex& operator/=(const float_complex&);
     };
     class double_complex {
     public:
       typedef double value_type;

       double_complex(double re = 0.0, double im = 0.0);
       double_complex(const float_complex&);
       double real() const;
       double imag() const;

       double_complex& operator= (double);
       double_complex& operator+=(double);
       double_complex& operator-=(double);
       double_complex& operator*=(double);
       double_complex& operator/=(double);

       double_complex& operator=(const double_complex&);
       double_complex& operator+=(const double_complex&);
       double_complex& operator-=(const double_complex&);
       double_complex& operator*=(const double_complex&);
       double_complex& operator/=(const double_complex&);
     };
========================================================================

26.2.4 complex member functions

Replace this whole subsection, as follows:
========================================================================
   float_complex(float re = 0.0f, float im = 0.0f);
   double_complex(double re = 0.0, double im = 0.0);

   Effects:
1    Constructs an object of class float_complex, double_complex.

2  Postcondition: real() == re  && imag() == im.
========================================================================

26.2.5 complex member operators

Replace only declarations of each function, as follows:
========================================================================
   float_complex& operator+=(float rhs);
   double_complex& operator+=(double rhs);

   float_complex& operator-=(float rhs);
   double_complex& operator-=(double rhs);

   float_complex& operator*=(float rhs);
   double_complex& operator*=(double rhs);

   float_complex& operator/=(float rhs);
   double_complex& operator/=(double rhs);

   float_complex& operator+=(const float_complex& rhs);
   double_complex& operator+=(const double_complex& rhs);

   float_complex& operator-=(const float_complex& rhs);
   double_complex& operator-=(const double_complex& rhs);

   float_complex& operator*=(const float_complex& rhs);
   double_complex& operator*=(const double_complex& rhs);

   float_complex& operator/=(const float_complex& rhs);
   double_complex& operator/=(const double_complex& rhs);
========================================================================

26.2.6 complex non-member operations

Replace this whole subsection, as follows:
========================================================================
   float_complex operator+(const float_complex& lhs);
   double_complex operator+(const double_complex& lhs);

1  Notes:  unary operator.
2  Returns:   float_complex(lhs), for float_complex,
              double_complex(lhs), for double_complex.

   float_complex operator+(const float_complex& lhs, const float_complex& rhs);
   float_complex operator+(const float_complex& lhs, const float& rhs);
   float_complex operator+(const float& lhs, const float_complex& rhs);

   double_complex operator+(const double_complex& lhs, const double_complex& rhs);
   double_complex operator+(const double_complex& lhs, const double& rhs);
   double_complex operator+(const double& lhs, const double_complex& rhs);

3  Returns:   float_complex(lhs) += rhs, for float_complex,
              double_complex(lhs) += rhs, for double_complex.

   float_complex operator-(const float_complex& lhs);
   double_complex operator-(const double_complex& lhs);

4  Notes:  unary operator.
5  Returns:   float_complex(-lhs.real(),-lhs.imag()), for float_complex,
              double_complex(-lhs.real(),-lhs.imag()), for double_complex.

   float_complex operator-(const float_complex& lhs, const float_complex& rhs);
   float_complex operator-(const float_complex& lhs, const float& rhs);
   float_complex operator-(const float& lhs, const float_complex& rhs);

   double_complex operator-(const double_complex& lhs, const double_complex& rhs);
   double_complex operator-(const double_complex& lhs, const double& rhs);
   double_complex operator-(const double& lhs, const double_complex& rhs);

6  Returns:   float_complex(lhs) -= rhs, for float_complex,
              double_complex(lhs) -= rhs, for double_complex.

   float_complex operator*(const float_complex& lhs, const float_complex& rhs);
   float_complex operator*(const float_complex& lhs, const float& rhs);
   float_complex operator*(const float& lhs, const float_complex& rhs);

   double_complex operator*(const double_complex& lhs, const double_complex& rhs);
   double_complex operator*(const double_complex& lhs, const double& rhs);
   double_complex operator*(const double& lhs, const double_complex& rhs);

7  Returns:   float_complex(lhs) *= rhs, for float_complex,
              double_complex(lhs) *= rhs, for double_complex.

   float_complex operator/(const float_complex& lhs, const float_complex& rhs);
   float_complex operator/(const float_complex& lhs, const float& rhs);
   float_complex operator/(const float& lhs, const float_complex& rhs);

   double_complex operator/(const double_complex& lhs, const double_complex& rhs);
   double_complex operator/(const double_complex& lhs, const double& rhs);
   double_complex operator/(const double& lhs, const double_complex& rhs);

8  Returns:   float_complex(lhs) /= rhs, for float_complex,
              double_complex(lhs) /= rhs, for double_complex.

   bool operator==(const float_complex& lhs, const float_complex& rhs);
   bool operator==(const float_complex& lhs, const float& rhs);
   bool operator==(const float& lhs, const float_complex& rhs);

   bool operator==(const double_complex& lhs, const double_complex& rhs);
   bool operator==(const double_complex& lhs, const double& rhs);
   bool operator==(const double& lhs, const double_complex& rhs);

9  Returns:   lhs.real() == rhs.real() && lhs.imag() == rhs.imag().
10 Notes:  For float_complex, the imaginary part is assumed to be  float(),
     or 0.0f, for the float arguments.
           For double_complex, the imaginary part is assumed to be
     double(), or 0.0, for the double arguments.

   bool operator!=(const float_complex& lhs, const float_complex& rhs);
   bool operator!=(const float_complex& lhs, const float& rhs);
   bool operator!=(const float& lhs, const float_complex& rhs);

   bool operator!=(const double_complex& lhs, const double_complex& rhs);
   bool operator!=(const double_complex& lhs, const double& rhs);
   bool operator!=(const double& lhs, const double_complex& rhs);

11 Returns:   rhs.real() != lhs.real() || rhs.imag() != lhs.imag().

   istream&  operator>>(istream& is, float_complex& x);
   istream&  operator>>(istream& is, double_complex& x);

12 Effects:  Extracts a complex number x of the form:    u,    (u),  or
     (u,v),  where    u  is  the  real  part and  v is the imaginary part.    
13 Requires:  The input values be convertible to  float for float_complex,
     and to double for double_complex.
     If bad input is encountered, calls  is.setstate(ios::failbit).
14 Returns:  is.

   ostream&  operator<<(ostream& o, const float_complex& x);
   ostream&  operator<<(ostream& o, const double_complex& x);

15 Returns:  o << '(' << x.real() << "," << x.imag() << ')' << ends.
========================================================================

26.2.7 complex value operations

Replace declarations of each operator, as follows:
========================================================================
   float real(const float_complex& x);
   double real(const double_complex& x);

   float imag(const float_complex& x);
   double imag(const double_complex& x);

   float abs(const float_complex& x);
   double abs(const double_complex& x);

   float arg(const float_complex& x);
   double arg(const double_complex& x);

   float norm(const float_complex& x);
   double norm(const double_complex& x);

   float_complex conj(const float_complex& x);
   double_complex conj(const double_complex& x);

   float_complex polar(const float& rho, const float& theta = 0.0f);
   double_complex polar(const double& rho, const double& theta = 0.0);
========================================================================

26.2.8 complex transcendentals

Replace declarations of each function, as follows:
========================================================================
   float_complex cos(const float_complex& x);
   double_complex cos(const double_complex& x);

   float_complex cosh(const float_complex& x);
   double_complex cosh(const double_complex& x);

   float_complex exp(const float_complex& x);
   double_complex exp(const double_complex& x);

   float_complex log(const float_complex& x);
   double_complex log(const double_complex& x);

   float_complex log10(const float_complex& x);
   double_complex log10(const double_complex& x);

   float_complex pow(const float_complex& x, int y);
   float_complex pow(const float_complex& x, const float_complex& y);
   float_complex pow  (const float_complex& x, const float& y);
   float_complex pow  (const float& x, const float_complex& y);
   double_complex pow(const double_complex& x, int y);
   double_complex pow(const double_complex& x, const double_complex& y);
   double_complex pow  (const double_complex& x, const double& y);
   double_complex pow  (const double& x, const double_complex& y);

   float_complex sin  (const float_complex& x);
   double_complex sin  (const double_complex& x);

   float_complex sinh (const float_complex& x);
   double_complex sinh (const double_complex& x);

   float_complex sqrt (const float_complex& x);
   double_complex sqrt (const double_complex& x);

   float_complex tan  (const float_complex& x);
   double_complex tan  (const double_complex& x);

   float_complex tanh (const float_complex& x);
   double_complex tanh (const double_complex& x);
========================================================================

26.3 Numeric arrays

Delete this whole section.

26.4 Generalized numeric operations

Delete this whole section.

27 Input/output library

Delete headers <sstream>, <fstream> and <cwchar> from the Table 83.

27.1 Iostreams requirements

Delete this whole section.

27.2 Forward declarations

In 'Header <iosfwd> synopsis', delete namespace 'std'.
Delete template class char_traits.
Delete template classes 'basic_ios' ,'basic_streambuf', 'basic_istream', 'basic_ostream' and 'basic_iostream'.
Delete template classes 'basic_stringbuf', 'basic_istringstream', 'basic_ostringstream', 'basic_stringstream', 'basic_filebuf', 'basic_ifstream', 'basic_ofstream', 'basic_fstream', 'basic_istreambuf_iterator' and 'basic_ostreambuf_iterator'.
Delete types 'wios', 'iostream', 'stringbuf', 'istringstream', 'ostringstream','stringstream', 'filebuf', 'ifstream', 'ofstream', 'fstream','wstreambuf', 'wistream', 'wostream', 'wiostream', 'wstringbuf','wistringstream', 'wostringstream', 'wstringstream', 'wfilebuf','wifstream', 'wofstream' and 'wfstream'.
Delete template class 'fpos'.
Delete types 'streampos' and 'wstreampos'.
Delete the 2nd,3rd,4th,5th,6th,7th,8th and 9th paragraphs.
Replace this whole section, as follows:
========================================================================
   Header <iosfwd> synopsis

     class ios;
     class streambuf;
     class istream;
     class ostream;

   [Note:

1  The class  ios serves as a  base  class    for    the    classes
   istream, ostream,  and  classes  derived   from   them.

    -end note]
========================================================================

27.3 Standard iostream objects

In 'Header <iostream> synopsis', delete file <fstream> including and namespace 'std'.
Not support classes 'cerr', 'clog', 'wcin', 'wcout', 'wcerr' and 'wclog'. Delete the 2nd paragraph..
Replace this whole section, as follows:
========================================================================
   Header <iostream> synopsis

   extern istream cin;
   extern ostream cout;

1  The header <iostream> declares objects that associate objects with the
   standard C streams provided for by the functions declared in <cstdio>.
========================================================================

27.3.1 Narrow stream objects

Delete objects 'cerr' and 'clog'. <4th,5th and 6th par.>

27.3.2 Wide stream objects

Delete this whole subsection.

27.4 Iostreams base classes

Delete namespace 'std', template classes 'fpos', 'basic_ios'.
Instead introduce class 'ios'.
Replace this whole section, as follows:
========================================================================
   #include <iosfwd>

     typedef OFF_T  streamoff;
     typedef SZ_T streamsize;

     class ios_base;
     class ios;

   // 27.4.6, manipulators:
     ios_base& boolalpha  (ios_base& str);
     ios_base& noboolalpha(ios_base& str);
     ios_base& showbase   (ios_base& str);
     ios_base& noshowbase (ios_base& str);
     ios_base& showpoint  (ios_base& str);
     ios_base& noshowpoint(ios_base& str);
     ios_base& showpos    (ios_base& str);
     ios_base& noshowpos  (ios_base& str);
     ios_base& skipws     (ios_base& str);
     ios_base& noskipws   (ios_base& str);
     ios_base& uppercase  (ios_base& str);
     ios_base& nouppercase(ios_base& str);
   // 27.4.6.2 adjustfield:
     ios_base& internal   (ios_base& str);
     ios_base& left       (ios_base& str);
     ios_base& right      (ios_base& str);
   // 27.4.6.3 basefield:
     ios_base& dec        (ios_base& str);
     ios_base& hex        (ios_base& str);
     ios_base& oct        (ios_base& str);
   // 27.4.6.4 floatfield:
     ios_base& fixed      (ios_base& str);
     ios_base& scientific (ios_base& str);
========================================================================

27.4.2 Class ios_base

In declaration of class 'ios_base', delete namespace 'std', class 'failure', member functions 'imbue' and 'getloc'.
Delete the description '--a class failure derived from exception;'. <1st par.>

27.4.2.1.1 Class ios_base::failure

Delete this whole subsection.

27.4.2.1.6 Class ios_base::Init

Delete namespace 'std'.

27.4.2.3 ios_base locale functions

Delete this whole subsection.

27.4.2.5 ios_base storage functions

Delete exception throwing. <2nd and 4th par.>

27.4.2.6 ios_base callbacks

Delete call of the function 'imbue()'. <1st par.>

27.4.3 Template class fpos

Delete this whole subsection.

27.4.4 fpos requirements

Delete this whole subsection.

27.4.5 Template class basic_ios

Replace the title of this subsection by 'Class ios'.
Delete namespace specifier.
Delete template classes 'basic_ios','basic_ostream' and 'basic_streambuf'. Instead introduce class 'ios','ostream' and 'streambuf'.
Delete functions 'ios::imbue','ios::narrow' and 'ios::widen'.
Replace all 'char_type' by 'char'.
Replace this whole subsection, as follows:
========================================================================
     class ios : public ios_base {
     public:
     // Types:
       typedef INT_T int_type;
       typedef POS_T pos_type;
       typedef OFF_T off_type;

       operator void*() const;
       bool operator!() const;
       iostate rdstate() const;
       void clear(iostate state = goodbit);
       void setstate(iostate state);
       bool good() const;
       bool eof()  const;
       bool fail() const;
       bool bad()  const;

       iostate exceptions() const;
       void exceptions(iostate except);

     // 27.4.5.1 Constructor/destructor:
       explicit ios(streambuf* sb);
       virtual ~ios();

     // 27.4.5.2 Members:
       ostream* tie() const;
       ostream* tie(ostream* tiestr);
       streambuf* rdbuf() const;
       streambuf* rdbuf(streambuf* sb);
       ios& copyfmt(const ios& rhs);
       char fill() const;
       char fill(char ch);

     protected:
       ios();
       void init(streambuf* sb);
     };
========================================================================

27.4.5.1 basic_ios constructors

Replace the title of this subsection by 'ios constructors'.
Replace constructors, as follows:
========================================================================
   explicit ios(streambuf* sb);

1  Effects:
     Constructs an object of class ios, assigning initial values to
     its member objects by calling init(sb).

   ios();

2  Effects:  Constructs an object of class  basic_ios (27.4.2.7)  leaving
     its  member objects uninitialized. The object must be initialized by
     calling its  init member function. If it is destroyed before it  has
     been initialized the behavior is undefined.
========================================================================
Replace Table 90, as follows:
========================================================================
          _________________________________________________________
         |   Element                       Value                  |
         |________________________________________________________|
         | rdbuf()        sb                                      |
         | tie()          0                                       |
         | rdstate()      goodbit if sb is  not  a  null  pointer,|
         |                otherwise badbit.                       |
         | exceptions()   goodbit                                 |
         | flags()        skipws | dec                            |
         | width()        0                                       |
         | precision()    6                                       |
         | fill()         ' '                                     |
         | iarray         a null pointer                          |
         | parray         a null pointer                          |
         |________________________________________________________|

========================================================================

27.4.5.2 Member functions

Delete member functions 'imbue','narrow' and 'widen'. Replace all 'char_type' by 'char'. Replace declarations of function 'tie','rbuf','fill' and 'copyfmt', as follows:
========================================================================
   ostream* tie() const;

   ostream* tie(ostream* tiestr);

   streambuf* rdbuf() const;

   streambuf* rdbuf(streambuf* sb);

   char fill() const;

   char fill(char ch);

   ios& copyfmt(const ios& rhs);
========================================================================

27.4.5.3 basic_ios iostate flags functions

Replace the title of this subsection by 'ios iostate flags functions'.
Replace the description of functions 'clear','setstate' and 'exceptions(void)', as follows:
========================================================================
   void clear(iostate state = goodbit);

4  Postcondition:  If  rdbuf()!=0 then  state ==  rdstate();  otherwise
     rdstate()==state|ios_base::badbit.
5  Effects:
     If  (rdstate()  & exceptions()) == 0, returns.  Otherwise, the
     behavior is undefined.

   void setstate(iostate state);

6  Effects:
     Calls clear(rdstate() | state).

   iostate exceptions() const;

11 Returns:  A mask that determines what elements set in  rdstate() cause
     undefined behavior.
========================================================================

27.5 Stream buffers

In 'Header <streambuf> synopsis', delete namespace 'std' and template class 'basic_streambuf'.
Instead introduce class 'streambuf' for char type to 'Header <streambuf> synopsis'.
Not support 'wstreambuf'.
Replace 'Header <streambuf> synopsis', as follows:
========================================================================
   Header <streambuf> synopsis

   class streambuf;
========================================================================

27.5.2 Template class basic_streambuf<charT,traits>

Replace the title of this subsection by 'Class streambuf'.
In declaration of class 'streambuf', delete namespace 'std', template class 'basic_streambuf' and functions 'streambuf::pubimbue', 'streambuf::getloc' and 'streambuf::imbue'.
Instead introduce class 'streambuf' for char type to declaration of class 'streambuf'.
In declaration of class 'streambuf', replace all 'char_type' by 'char' and 'traits::eof()' by 'EOF'.
Delete the 2nd and 3rd paragraphs.
Replace this whole subsection, as follows:
========================================================================
     class streambuf {
     public:
     // Types:
       typedef INT_T int_type;
       typedef POS_T pos_type;
       typedef OFF_T off_type;
       virtual ~streambuf();

     // 27.5.2.2.2 buffer and positioning:
       streambuf*  pubsetbuf(char* s, streamsize n);
       pos_type pubseekoff(off_type off, ios_base::seekdir way,
                  ios_base::openmode which = ios_base::in | ios_base::out);
       pos_type pubseekpos(pos_type sp,
                  ios_base::openmode which = ios_base::in | ios_base::out);
       int      pubsync();

     // Get and put areas:
     // 27.5.2.2.3 Get area:
       streamsize  in_avail();
       int_type snextc();
       int_type sbumpc();
       int_type sgetc();
       int      sgetn(char* s, streamsize n);
     // 27.5.2.2.4 Putback:
       int_type sputbackc(char c);
       int      sungetc();
     // 27.5.2.2.5 Put area:
       int      sputc(char c);
       int_type sputn(const char* s, streamsize n);
     protected:
       streambuf();
     // 27.5.2.3.1 Get area:
       char* eback() const;
       char* gptr()  const;
       char* egptr() const;
       void       gbump(int n);
       void       setg(char* gbeg, char* gnext, char* gend);
     // 27.5.2.3.2 Put area:
       char* pbase() const;
       char* pptr() const;
       char* epptr() const;
       void       pbump(int n);
       void       setp(char* pbeg, char* pend);
     // 27.5.2.4 virtual functions:
     // 27.5.2.4.2 management and positioning:
       virtual streambuf*  setbuf(char* s, streamsize n);
       virtual pos_type seekoff(off_type off, ios_base::seekdir way,
                 ios_base::openmode which = ios_base::in | ios_base::out);
       virtual pos_type seekpos(pos_type sp,
                 ios_base::openmode which = ios_base::in | ios_base::out);
       virtual int      sync();
     // 27.5.2.4.3 Get area:
       virtual int        showmanyc();
       virtual streamsize xsgetn(char* s, streamsize n);
       virtual int_type   underflow();
       virtual int_type   uflow();
     // 27.5.2.4.4 Putback:
       virtual int_type   pbackfail(int_type c = EOF);
     // 27.5.2.2.5 Put area:
       virtual streamsize xsputn(const char* s, streamsize n);
       virtual int_type   overflow (int_type c = EOF);
     };

1  The class streambuf serves as an abstract
   base class for deriving various  stream  buffers  whose  objects  each

   control two character sequences:

   --a character input sequence;

   --a character output sequence.
========================================================================

27.5.2.1 basic_streambuf constructors

Replace the title of this subsection by 'streambuf constructors'.
Replace this whole subsection, as follows:
========================================================================
   streambuf();

1  Effects:
     Constructs  an  object  of  class  streambuf and  initializes:257)

   --all its pointer member objects to null pointers,

   __________________________
   257) The default constructor is protected for class    streambuf
   to assure that only objects for classes derived from this class may be
   constructed.
========================================================================

27.5.2.2 basic_streambuf public member functions

Replace the title of this subsection by 'streambuf public member functions'.

27.5.2.2.1 Locales

Delete this whole subsection.

27.5.2.2.2 Buffer management and positioning

Replace 'char_type' by 'char'.
Replace declarations of each function, as follows:
========================================================================
   streambuf* pubsetbuf(char* s, streamsize n);

   pos_type pubseekoff(off_type off, ios_base::seekdir way,
                  ios_base::openmode which = ios_base::in | ios_base::out);

   pos_type pubseekpos(pos_type sp,
                  ios_base::openmode which = ios_base::in | ios_base::out);

   int pubsync();
========================================================================

27.5.2.2.3 Get area

Replace all 'traits::eof()' in member function 'snextc' by 'EOF'.
Replace 'traits::to_int_type()' in member function 'sbumpc' and 'sgetc' by functional cast 'int_type()'.

27.5.2.2.4 Putback

Replace 'char_type' in member function 'sputbackc' by 'char'.
Replace 'traits::eq(c,gptr[-1])' in member function 'sputbackc' by 'c == gptr[-1]'.
Replace 'traits::to_int_type()' in member functions 'sputbackc' and 'sungetc' by functional cast 'int_type()'.

27.5.2.2.5 Put area

Replace 'char_type' in member function 'sputn' by 'char'.
Replace 'traits::to_int_type()' in member function 'sputc' by functional cast 'int_type()'.

27.5.2.3 basic_streambuf protected member functions

Replace the title of this subsection by 'streambuf protected member functions'.

27.5.2.3.1 Get area access

Replace all 'char_type' by 'char'.

27.5.2.3.2 Put area access

Replace all 'char_type' by 'char'.

27.5.2.4 basic_streambuf virtual functions

Replace the title of this subsection by 'streambuf virtual functions'.

27.5.2.4.1 Locales

Delete this whole subsection.

27.5.2.4.2 Buffer management and positioning

Replace all 'basic_streambuf' in this subsection by 'streambuf'.
Replace 'char_type' by 'char'.
Replace only declaration of function 'setbuf', as follows:
========================================================================
   streambuf* setbuf(char* s, streamsize n);
========================================================================

27.5.2.4.3 Get area

Replace all 'traits::eof()' in this whole subsection by 'EOF'.
Replace all 'basic_streambuf' in this whole subsection by 'streambuf'.
Replace Footnote 259), as follows:
========================================================================
   259) The intention is not only that the calls will not return
    EOF but that they will return ``immediately.''
========================================================================
Replace 'char_type' in member function 'xsgetn' by 'char'.
Replace all 'traits::to_int_type()' in this subsection by functional cast 'int_type()'.

27.5.2.4.4 Putback

Replace 'basic_streambuf' by 'streambuf'. <1st par.>
Replace 'traits::eq(*gptr(),traits::to_char_type(c))' by '*gptr() == c'. <1st par.>
Replace both 'traits::eq_int_type(c,traits::eof())' in the 1st paragraph by 'c == EOF'. Replace all 'traits::eof()' by 'EOF'.

27.5.2.4.5 Put area

Replace all 'traits::eof()' by 'EOF'.
Replace 'basic_streambuf' in footnote 261) by 'streambuf'.
Replace all 'traits::eq_int_type(c,traits::eof())' in this subsection by 'c == EOF'.
Replace 'traits::not_eof(c)' in footnote 262) by 'c if c != EOF, otherwise a value f such that f == EOF is false'.
Replace the 6th paragraph, as follows:
========================================================================
6  Returns:
     EOF or undefined if the function fails.
     Otherwise, returns some value other than EOF  to  indicate
     success.262)
========================================================================

27.6 Formatting and manipulators

In 'Header <istream> synopsis', delete namespace 'std' and template class 'basic_istream'.
Instead introduce class 'istream' for char type to 'Header <istream> synopsis'.
Replace 'charT' by 'char'.
In 'Header <ostream> synopsis', delete namespace 'std' and template class 'basic_ostream'.
Instead introduce class 'ostream' for char type to 'Header <ostream> synopsis'.
Not support classes 'wistream' and 'wostream'.
In 'Header <iomanip> synopsis', delete namespace 'std'.
Replace this whole section, as follows:
========================================================================
   Header <istream> synopsis

     class istream;
     istream& ws(istream& is);

   Header <ostream> synopsis

     class ostream;
     ostream& endl(ostream& os);
     ostream& ends(ostream& os);
     ostream& flush(ostream& os);

   Header <iomanip> synopsis

       // Types T1, T2, ... are unspecified
       // implementation types
       T1 resetiosflags(ios_base::fmtflags mask);
       T2 setiosflags  (ios_base::fmtflags mask);
       T3 setbase(int base);
       T4 setfill(char c);
       T5 setprecision(int n);
       T6 setw(int n);
========================================================================

27.6.1.1 Template class basic_istream

Replace the title of this subsection by 'Class istream'.
In declaration of class 'istream', delete namespace 'std'.
In declaration of class 'istream', delete template classes 'basic_istream','basic_streambuf' and 'basic_ios'. Instead introduce classes 'istream','streambuf' and 'ios' for char type to declaration of class 'istream'.
In declaration of class 'istream', replace 'ios' class virtual inheritance by non-virtual inheritance.
In declaration of class 'istream', replace all 'char_type' by 'char', all 'traits::eof()' by 'EOF', and 'charT' by 'char'.
Replace declaration of class 'istream', as follows:
========================================================================
     class istream : public ios {
     public:
     // Types (inherited from ios):
    // typedef INT_T int_type;
    // typedef POS_T pos_type;
    // typedef OFF_T off_type;

     // 27.6.1.1.1 Constructor/destructor:
       explicit istream(streambuf* sb);
       virtual ~istream();

     // 27.6.1.1.2 Prefix/suffix:
       class sentry;

     // 27.6.1.2 Formatted input:
       istream& operator>> (istream& (*pf)(istream&));
       istream& operator>> (ios& (*pf)(ios&));
       istream& operator>> (ios_base& (*pf)(ios_base&));


       istream& operator>>(bool& n);
       istream& operator>>(short& n);
       istream& operator>>(unsigned short& n);
       istream& operator>>(int& n);
       istream& operator>>(unsigned int& n);
       istream& operator>>(long& n);
       istream& operator>>(unsigned long& n);
       istream& operator>>(float& f);
       istream& operator>>(double& f);
       istream& operator>>(long double& f);
       istream& operator>>(void*& p);
       istream& operator>>(streambuf* sb);


     // 27.6.1.3 Unformatted input:
       streamsize gcount() const;
       int_type get();
       istream& get(char& c);
       istream& get(char* s, streamsize n);
       istream& get(char* s, streamsize n, char delim);
       istream& get(streambuf& sb);
       istream& get(streambuf& sb, char delim);


       istream& getline(char* s, streamsize n);
       istream& getline(char* s, streamsize n, char delim);

       istream& ignore(streamsize n = 1, int_type delim = EOF);
       int_type peek();
       istream& read    (char* s, streamsize n);
       streamsize readsome(char* s, streamsize n);


       istream& putback(char c);
       istream& unget();
       int sync();

       pos_type tellg();
       istream& seekg(pos_type);
       istream& seekg(off_type, ios_base::seekdir);
     };

     // 27.6.1.2.3 character extraction templates:
     istream& operator>>(istream&, char&);
     istream& operator>>(istream&, unsigned char&);
     istream& operator>>(istream&, signed char&);

     istream& operator>>(istream&, char*);
     istream& operator>>(istream&, unsigned char*);
     istream& operator>>(istream&, signed char*);
========================================================================
Replace 'basic_istream' by 'istream'. <1st par.>
Delete the 4th paragraph.
Replace 'traits::eof()' by 'EOF'. <3rd par.>
Replace the 3rd paragraph, as follows:
========================================================================
3  If  rdbuf()->sbumpc() or   rdbuf()->sgetc()  returns  EOF,
   then  the  input  function,  except  as  explicitly  noted  otherwise,
   completes its actions and does  setstate(eofbit).
========================================================================

27.6.1.1.1 basic_istream constructors

Replace the title of this subsection by 'istream constructors'.
Replace 'basic_istream' by 'istream'. <1st and 3rd par.>
Replace 'basic_ios::init(sb)' by 'ios::init(sb)'. <1st par.>
Replace declarations of constructor and destructor, as follows:
========================================================================
   explicit istream(streambuf* sb);

   virtual ~istream();
========================================================================

27.6.1.1.2 Class basic_istream::sentry

Replace the title of this subsection by 'class istream::sentry'.
In declaration of class 'sentry', delete namespace 'std'.
Replace template class 'basic_istream' by class 'istream'.
Replace declaration of class 'istream::sentry', as follows:
========================================================================
     class istream::sentry {
       bool ok_; // exposition only
      public:
       explicit sentry(istream& is, bool noskipws = false);
       ~sentry();
       operator bool() { return ok_; }
     };
========================================================================
Replace declaration of constructor, as follows:
========================================================================
   explicit sentry(istream& is, bool noskipws = false);
========================================================================
Delete the 4th paragraph.
Delete exception throwing. <5th par.>
Replace 'traits::eof()' by 'EOF'. <6th par.>
Replace the 6th paragraph, as follows:
========================================================================
6  [Example: A typical implementation of the   sentry  constructor  might
   include code such as:

   istream::sentry(istream& is, bool noskipws = false) {
       ...
       int_type c;
       while ((c = is.rdbuf()->snextc()) != EOF) {
         if (!isspace(c)) {
           is.rdbuf()->sputbackc (c);
           break;
         }
       }
       ...
    }

    -end example]
========================================================================

27.6.1.2.1 Common requirements

Replace the 1st paragraph, as follows:
========================================================================
1  Each formatted input function  begins  execution  by  constructing  an
   object  of  class  sentry with the  noskipws (second) argument  false.
   If the  sentry object returns  true, when converted to a value of type
     bool,  the  function endeavors to obtain the requested input.
   If  (exception()&badbit)!= 0 then the behavior is undefined.
   In any case, the formatted input function destructs the
   sentry object.  If undefined behavior has not happened thrown it
   returns  *this
========================================================================

27.6.1.2.2 Arithmetic Extractors

Delete paragraphs except function declarations.

27.6.1.2.3 basic_istream::operator>>

Replace the title of this subsection by 'istream::operator>>'.
Replace 'char_type' by 'char'. <6th par.>
Replace all 'charT' by 'char'.
In footnote 266), replace 'ws(basic_istream&)' by 'ws(istream&)'.
Replace declarations of each function, as follows:
========================================================================
   istream& operator>>(istream& (*pf)(istream&))

   istream& operator>>(ios& (*pf)(ios&));

   istream& operator>>(ios_base& (*pf)(ios_base&));

   istream& operator>>(istream& in, char* s);
   istream& operator>>(istream& in, unsigned char* s);
   istream& operator>>(istream& in, signed char* s);

   istream& operator>>(istream& in, char& c);
   istream& operator>>(istream& in, unsigned char& c);
   istream& operator>>(istream& in, signed char& c);

   istream& operator>>(streambuf* sb);
========================================================================
Replace 'traits::eos()' by '\0'. <7th par.> Replace the 7th paragraph, as follows:
========================================================================

7  Characters are extracted and stored until any of the following occurs:

   -  n-1 characters are stored;

   - end of file occurs on the input sequence;

   -  isspace(c) is true for the next available input character c.

   - A null byte ('\0') in the next position, which may be the
     first position if no characters were extracted.

    operator>> then calls  width(0).
========================================================================
Delete exception throwing. <8th par.>
Replace the 12th and 13th paragraphs, as follows:
========================================================================
12 Effects:  If sb is null, calls  setstate(failbit).
     Extracts characters from  *this  and  inserts  them  in  the  output
     sequence  controlled  by  sb.  Characters are extracted and inserted
     until any of the following occurs:

   - end-of-file occurs on the input sequence;

   - inserting in the output sequence fails (in which case the  character
     to be inserted is not extracted);
13   If the function inserts no characters, it calls   setstate(failbit).
========================================================================
Delete exception throwing. <13th par.>

27.6.1.3 Unformatted input functions

Replace 'traits::eof()' in this whole subsection by 'EOF'.
Replace all 'char_type' in this whole subsection by 'char'.
Replace the 1st paragraph, as follows:
========================================================================
1  Each unformatted input function begins execution  by  constructing  an
   object  of  class  sentry with the default argument  noskipws (second)
   argument  true.  If the  sentry object returns  true,  when  converted
   to  a  value  of  type    bool,  the  function endeavors to obtain the
   requested input. If
   (exception()&badbit)!= 0 then the behavior is undefined. It also counts
   the number of characters extracted.  If undefined behavior has not
   happened  it  ends  by  storing  the  count in a member object and
   returning the  value specified.  In any event the  sentry object is
   destroyed  before leaving the unformatted input function.
========================================================================
Regarding the 1st and 2nd member function 'get', replace the 3rd and 5th paragraphs, as follows:
========================================================================
   int_type get();

3  Effects:
     Extracts  a  character c, if one is available.  Otherwise, the func-
     tion calls  setstate(failbit).

   istream& get(char &c);

5  Effects:
     Extracts a character, if one is available, and assigns it to  c.269)
     Otherwise,  the  function  calls  setstate(failbit).
========================================================================
Regarding the 3rd member function 'get', replace the 8th paragraph, as follows:
========================================================================
   istream& get(char*  s, streamsize n, char delim);

8  If  the  function  stores  no  characters,  it calls setstate(failbit).
   In any
   case,  it  then stores a null character into the next successive loca-
   tion of the array.
========================================================================
Replace the 4th member function 'get', as follows:
========================================================================
   istream& get(char *s, streamsize n)

10 Effects: Calls getline(s,n,'\n');
11 Returns: Value returned by the call.
========================================================================
Regarding the 5th member function 'get', replace the 12th and 13th paragraphs, as follows:
========================================================================
   istream& get(streambuf& sb, char delim);

12 Effects:
     Extracts characters and inserts them in  the  output  sequence  con-
     trolled by sb.  Characters are extracted and inserted until any
     of the following occurs:

   --end-of-file occurs on the input sequence;

   --inserting in the output sequence fails (in which case the  character
     to be inserted is not extracted);

   --c == delim for the next available input character c (in which case c
     is not extracted);

13 If  the  function  inserts  no characters, it calls setstate(failbit).
========================================================================
Replace the 6th member function 'get', as follows:
========================================================================
   istream& get(streambuf& sb);

15 Effects: Calls getline(s,n,'\n');
16 Returns: Value returned by the call.
========================================================================
Regarding the 1st member function 'getline', replace the 19th,20th and 22th paragraphs, as follows:
========================================================================
   istream& getline(char* s, streamsize n, char delim);

19 If  the  function  extracts  no characters, it calls setstate(failbit).

20 In  any  case,  it  then stores a null character 
   into the next successive location of the array.

22 [Example:

     #include 

     int main()
     {
       const int line_buffer_size = 100;

       char buffer[line_buffer_size];
       int line_number = 0;
       while (cin.getline(buffer, line_buffer_size) || cin.gcount()) {
         int count = cin.gcount();
         if (cin.eof())
           cout << "Partial final line";   // cin.fail() is false
         else if (cin.fail()) {
           cout << "Partial long line";
           cin.clear(cin.rdstate() & ~ios::failbit);
         } else {
           count--;        // Don't include '\n' in count
           cout << "Line " << ++line_number;
         }
         cout << " (" << count << " chars): " << buffer << endl;
       }
     }
    --end example]
========================================================================
Replace the 2nd member function 'getline', as follows:
========================================================================
   istream& getline(char *s, streamsize n);

23 Returns: getline(s,n,'\n');
========================================================================
Regarding member function 'ignore', replace the 24th paragraph, as follows:
========================================================================
   istream&  ignore(int n = 1, int_type delim = EOF);

24 Effects:
     Extracts characters and discards  them.   Characters  are  extracted
     until any of the following occurs:

   --if n  != INT_MAX, n characters are
     extracted

   --end-of-file occurs on the input sequence (in which case the function
     calls    setstate(eofbit).

   --c == delim for the next available input character c (in which case c
     is extracted).
========================================================================
Regarding member function 'read', replace the 28th paragraph, as follows:
========================================================================
   istream& read(char* s, streamsize n);

28 Effects:
     Extracts characters and stores them into successive locations of  an
     array whose first element is designated  by  s.275)  Characters  are
     extracted and stored until either of the following occurs:

   --n characters are stored;

   --end-of-file occurs on the input sequence (in which case the function
     calls   setstate(failbit).
========================================================================
Regarding member function 'readsome', replace the 30th paragraph, as follows:
========================================================================
   streamsize readsome(char* s, streamsize n);

30 Effects:  If  !good() calls   setstate(failbit), and return.
     Otherwise  extracts characters and stores
     them into successive locations of an array whose  first  element  is
     designated   by   s.    If     rdbuf()->in_avail()  ==  -1,  calls
     setstate(eofbit), and extracts no characters;

   - If  rdbuf()->in_avail() == 0, extracts no characters

   - If  rdbuf()->in_avail() > 0, extracts  min(rdbuf()->in_avail(),n)).
  
========================================================================
 
Regarding member functions 'putback','unget' and 'sync', replace the 32th,34th and 36th paragraphs, as follows:
========================================================================
   istream& putback(char c);


32 Effects:  If  !good() calls   setstate(failbit), and return.
     If    rdbuf()  is not null, calls  rdbuf->sputbackc() . If  rdbuf() is
     null,  or  if    sputback()  returns   EOF,   calls
     setstate(badbit).

   istream& unget();

34 Effects:  If  !good() calls   setstate(failbit), and return.
     If   rdbuf() is not null, calls  rdbuf()->sungetc().  If   rdbuf()  is
     null,  or  if    sungetc()  returns  EOF,   calls      
     setstate(badbit).

   int sync();

36 Effects:  If  rdbuf() is a null  pointer,  returns  -1  .   Otherwise,
     calls    rdbuf()->pubsync()  and, if that function returns -1 calls
     setstate(badbit), and
     returns  EOF.  Otherwise, returns zero.
========================================================================
Regarding the other member functions, replace declaration, as follows:
========================================================================
   streamsize gcount() const;

   int_type peek();

   pos_type tellg();

   istream& seekg(pos_type pos);

   istream& seekg(off_type& off, ios_base::seekdir dir);
========================================================================

27.6.1.4 Standard basic_istream manipulators

Replace the title of this subsection by 'Standard istream manipulators'.
Replace only declaration of function 'ws', as follows:
========================================================================
       istream& ws(istream& is);
========================================================================

27.6.1.5 Template class basic_iostream

Delete this whole subsection.

27.6.2.1 Template class basic_ostream

Replace the title of this subsection by 'Class ostream'.
In declaration of class 'ostream', delete namespace 'std'.
In declaration of class 'ostream', delete template classes 'basic_istream', 'basic_streambuf' and 'basic_ios'.
Instead introduce classes 'ostream','streambuf' and 'ios' for char type to declaration of class 'ostream'.
In declaration of class 'ostream', replace 'ios' class virtual inheritance by non-virtual inheritance.
In declaration of class 'ostream', replace 'char_type' by 'char'.
Replace declaration of class 'ostream', as follows:
========================================================================
     class ostream : public ios {
     public:
     // Types (inherited from ios):
    // typedef INT_T int_type;
    // typedef POS_T pos_type;
    // typedef OFF_T off_type;

     // 27.6.2.2 Constructor/destructor:
       explicit ostream(streambuf* sb);
       virtual ~ostream();

     // 27.6.2.3 Prefix/suffix:
       class sentry;

     // 27.6.2.5 Formatted output:
       ostream& operator<< (ostream& (*pf)(ostream&));
       ostream& operator<< (ios& (*pf)(ios&));
       ostream& operator<< (ios_base& (*pf)(ios_base&));


       ostream& operator<<(bool n);
       ostream& operator<<(short n);
       ostream& operator<<(unsigned short n);
       ostream& operator<<(int n);
       ostream& operator<<(unsigned int n);
       ostream& operator<<(long n);
       ostream& operator<<(unsigned long n);
       ostream& operator<<(float f);
       ostream& operator<<(double f);
       ostream& operator<<(long double f);
       ostream& operator<<(void* p);
       ostream& operator<<(streambuf* sb);


     // 27.6.2.6 Unformatted output:
       ostream& put(char c);
       ostream& write(const char* s, streamsize n);
       ostream& flush();

     // 27.6.2.4 seeks:
       pos_type tellp();
       ostream& seekp(pos_type);
       ostream& seekp(off_type, ios_base::seekdir);
     };


     // 27.6.2.5.4 character inserters
     ostream& operator<<(ostream&, char);
     // signed and unsigned
     ostream& operator<<(ostream&, signed char);
     ostream& operator<<(ostream&, unsigned char);

     ostream& operator<<(ostream&, const char*);
     //  signed and unsigned
     ostream& operator<<(ostream&, const signed char*);
     ostream& operator<<(ostream&, const unsigned char*);
========================================================================
Replace 'basic_ostream' by 'ostream'. <1st and 2nd par.>
Delete the 3rd paragraph.

27.6.2.2 basic_ostream constructors

Replace the title of this subsection by 'ostream constructors'.
Replace 'basic_ostream' by 'ostream'. <1st and 3rd par.>
Replace 'basic_ios<charT,traits>::init(sb)' by 'ios::init(sb)'. <1st par.>
Replace declarations of constructor and destructor, as follows:
========================================================================
   explicit ostream(streambuf* sb);

   virtual ~ostream();
========================================================================

27.6.2.3 Class basic_ostream::sentry

Replace the title of this subsection by 'class ostream::sentry'.
In declaration of class 'sentry', delete namespace 'std'.
Replace template class 'basic_ostream' by class 'ostream'.
Replace declaration of class 'ostream::sentry', as follows:
========================================================================
     class ostream::sentry {
       bool ok_; // exposition only
      public:
       explicit sentry(ostream& os);
       ~sentry();
       operator bool() { return ok_; }
     };
========================================================================
Replace declaration of constructor, as follows:
========================================================================
   explicit sentry(ostream& os);
========================================================================
Delete exception throwing. <3rd par.>

27.6.2.4 basic_ostream seek members

Replace only declarations of member function 'seekp', as follows:
========================================================================
   ostream& seekp(pos_type& pos);

   ostream& seekp(off_type& off, ios_base::seekdir dir);
========================================================================

27.6.2.5.1 Common requirements

Replace the 1st paragraph, as follows:
========================================================================
1  Each formatted output function begins  execution  by  constructing  an
   object  of class  sentry.  If this object returns  true when converted
   to a value of type  bool,  the  function  endeavors  to  generate  the
   requested  output.  If the generation fails, then the formatted output
   function does  setstate(ios::failbit).
   If  (exception()&badbit)!= 0  then  the behavior is undefined.
   In any case, the
   sentry  object  is  destroyed  before  leaving  the  formatted  output
   function.   If  undefined behavior has not happened , the result of the
   formattted  output function is  *this.
========================================================================

27.6.2.5.2 Arithmetic Inserters

Delete the 1st and 2nd paragraphs.

27.6.2.5.3 basic_ostream::operator<<

Replace the title of this subsection by 'ostream::operator<<'.
In footnote 279), replace 'endl(basic_ostream&)' by 'endl(ostream&)'.
Replace declarations of each function, as follows:
========================================================================
   ostream& operator<<(ostream& (*pf)(ostream&));

   ostream& operator<<(ios& (*pf)(ios&));

   ostream& operator<<(ios_base& (*pf)(ios_base&));

   ostream& operator<<(streambuf *sp);
========================================================================
Delete exception throwing. <6th par.> Replace the 7th and 8th paragraphs, as follows:
========================================================================
7  Gets characters from sb and inserts them in   *this.   Characters  are
   read from sb and inserted until any of the following occurs:

   - end-of-file occurs on the input sequence;

   - inserting in the output sequence fails (in which case the  character
     to be inserted is not extracted);

8  If the function inserts no characters,  it  calls    setstate(failbit).
========================================================================

27.6.2.5.4 Character inserter template functions

Replace the title of this subsection by 'Character inserter functions'.
Replace 'traits::length()' by '::strlen()'. <4th par.>
Replace this whole subsection, as follows:
========================================================================
   ostream& operator<<(ostream& out,  char c);
     // signed and unsigned
   ostream& operator<<(ostream& out,  signed char c);
   ostream& operator<<(ostream& out,  unsigned char c);

1  Effects:   Behaves  like  an  formatted  inserter  (as  described   in
     27.6.2.5.1)  of  out.   After a  sentry object is constructed insert
     characters.  The  character  to be inserted is  c.
     width(0)  is  called.   The  insertion  character is inserted into
     out.
2  Returns:   out

   ostream& operator<<(ostream& out,  const char* s);
   ostream& operator<<(ostream& out,  const signed char* s);
   ostream& operator<<(ostream& out,  const unsigned char* s);

3  Requires:  s is non-null.
4  Effects:   Behaves  like  an  formatted  inserter  (as  described   in
     27.6.2.5.1)  of  out.   After a  sentry object is constructed insert
     characters.  The number of characters starting at s to  be  inserted
     is    ::strlen(s).   
     The  ::strlen(s) characters starting at s is inserted into out.
     Calls  width(0).
5  Returns:   out
========================================================================

27.6.2.6 Unformatted output functions

Delete exception throwing. <3rd, 5th and 7th par.>
Replace all 'char_type' by 'char'.
Replace declarations of each function, as follows:
========================================================================
   ostream& put(char c);

   ostream& write(const char* s, streamsize n);

   ostream& flush();
========================================================================

27.6.2.7 Standard basic_ostream manipulators

Replace the title of this subsection by 'Standard ostream manipulators'.
Replace 'traits::eos()' by '\0'. <3rd par.>
Replace this whole subsection, as follows:
========================================================================
     ostream& endl(ostream& os);

1  Effects:  Calls , os.put(os.widen('\n')) then  os.flush().
2  Returns:  os.284)

     ostream& ends(ostream& os);

3  Effects:  Inserts a null character into the output  sequence:  calls
     os.put('\0').
4  Returns:  os.

     ostream& flush(ostream& os);

5  Effects:  Calls  os.flush().
6  Returns:  os.
========================================================================

27.6.3 Standard manipulators

Replace 'basic_ostream' by 'ostream'. <3rd,4th,5th,7th and 8th par.>
Replace 'char_type' and 'charT' by 'char'.
Replace only 'setfill' function's specification, as follows:
========================================================================
   smanip setfill(char c);

6  Returns:  An object s of implementation specified type such that  if
     out  is  (or is derived from)  ostream and c has
     type  char then the expression  out<<s behaves as  if    f(s)  were
     called, where f can be defined as:

     ios& f(ios& str, char c)
       { // set fill character
         str.fill(c);
         return str;
       }
========================================================================

27.7 String streams

Delete this whole section.

27.8.1 File streams

Delete this whole subsection.

27.8.2 C Library files

In 'Header <cstdio>', reserve only macros 'EOF' and 'NULL', type 'size_t' and functions 'getchar', 'gets', 'printf', 'putchar', 'puts', 'scanf', 'sprintf','sscanf','vprintf' and 'vsprintf'.
Replace Table 95, as follows:
========================================================================
   +--------------------------------------------------------------------+
   |    Type                                   Name(s)                  |
   +--------------------------------------------------------------------+
   |Macros:                                                             |
   |EOF                  NULL <cstdio>                                  |
   +--------------------------------------------------------------------+
   |Types:               size_t <cstdio>                                |
   +--------------------------------------------------------------------+
   |Functions:                                                          |
   |getchar              puts                  vprintf                  |
   |gets                 scanf                 vsprintf                 |
   |printf               sprintf                                        |
   |putchar              sscanf                                         |
   +--------------------------------------------------------------------+
========================================================================