<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 11">
<meta name=Originator content="Microsoft Word 11">
<link rel=File-List href="N2815_files/filelist.xml">
<title>Document number: N2815=09-0005</title>
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:Author>ranis</o:Author>
  <o:Template>Normal</o:Template>
  <o:LastAuthor>Rani Sharoni</o:LastAuthor>
  <o:Revision>2</o:Revision>
  <o:TotalTime>6704</o:TotalTime>
  <o:LastPrinted>2007-10-02T02:22:00Z</o:LastPrinted>
  <o:Created>2009-01-29T17:10:00Z</o:Created>
  <o:LastSaved>2009-01-29T17:10:00Z</o:LastSaved>
  <o:Pages>1</o:Pages>
  <o:Words>2110</o:Words>
  <o:Characters>12031</o:Characters>
  <o:Company>Microsoft</o:Company>
  <o:Lines>100</o:Lines>
  <o:Paragraphs>28</o:Paragraphs>
  <o:CharactersWithSpaces>14113</o:CharactersWithSpaces>
  <o:Version>11.9999</o:Version>
 </o:DocumentProperties>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:SpellingState>Clean</w:SpellingState>
  <w:GrammarState>Clean</w:GrammarState>
  <w:PunctuationKerning/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
  <w:LsdException Locked="true" Name="Normal"/>
  <w:LsdException Locked="true" Name="heading 1"/>
  <w:LsdException Locked="true" Name="heading 2"/>
  <w:LsdException Locked="true" Name="heading 3"/>
  <w:LsdException Locked="true" Name="heading 4"/>
  <w:LsdException Locked="true" Name="heading 5"/>
  <w:LsdException Locked="true" Name="heading 6"/>
  <w:LsdException Locked="true" Name="heading 7"/>
  <w:LsdException Locked="true" Name="heading 8"/>
  <w:LsdException Locked="true" Name="heading 9"/>
  <w:LsdException Locked="true" Name="toc 1"/>
  <w:LsdException Locked="true" Name="toc 2"/>
  <w:LsdException Locked="true" Name="toc 3"/>
  <w:LsdException Locked="true" Name="toc 4"/>
  <w:LsdException Locked="true" Name="toc 5"/>
  <w:LsdException Locked="true" Name="toc 6"/>
  <w:LsdException Locked="true" Name="toc 7"/>
  <w:LsdException Locked="true" Name="toc 8"/>
  <w:LsdException Locked="true" Name="toc 9"/>
  <w:LsdException Locked="true" Name="caption"/>
  <w:LsdException Locked="true" Name="Title"/>
  <w:LsdException Locked="true" Name="Subtitle"/>
  <w:LsdException Locked="true" Name="Strong"/>
  <w:LsdException Locked="true" Name="Emphasis"/>
  <w:LsdException Locked="true" Name="Table Grid"/>
 </w:LatentStyles>
</xml><![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:SimSun;
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-alt:????????????;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:1 135135232 16 0 262144 0;}
@font-face
	{font-family:Calibri;
	panose-1:0 0 0 0 0 0 0 0 0 0;
	mso-font-alt:"Arial Rounded MT Bold";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:3 0 0 0 1 0;}
@font-face
	{font-family:"Trebuchet MS";
	panose-1:2 11 6 3 2 2 2 2 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:647 0 0 0 159 0;}
@font-face
	{font-family:Verdana;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:536871559 0 0 0 415 0;}
@font-face
	{font-family:"\@SimSun";
	panose-1:0 0 0 0 0 0 0 0 0 0;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:1 135135232 16 0 262144 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-parent:"";
	margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:Calibri;}
h1
	{mso-style-link:"Heading 1 Char";
	mso-style-next:Normal;
	margin-top:15.0pt;
	margin-right:0in;
	margin-bottom:9.0pt;
	margin-left:.3in;
	text-indent:-.3in;
	mso-pagination:widow-orphan;
	page-break-after:avoid;
	mso-outline-level:1;
	mso-list:l0 level1 lfo1;
	tab-stops:list .3in;
	border:none;
	mso-border-bottom-alt:solid #333399 .25pt;
	padding:0in;
	mso-padding-alt:0in 0in 1.0pt 0in;
	font-size:14.0pt;
	mso-bidi-font-size:16.0pt;
	font-family:"Trebuchet MS";
	mso-bidi-font-family:Arial;
	color:#333399;
	mso-font-kerning:16.0pt;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;}
h2
	{mso-style-link:"Heading 2 Char";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:0in;
	margin-bottom:6.0pt;
	margin-left:.4in;
	text-indent:-.4in;
	mso-pagination:widow-orphan;
	page-break-after:avoid;
	mso-outline-level:2;
	mso-list:l0 level2 lfo1;
	tab-stops:list .4in;
	border:none;
	mso-border-bottom-alt:solid gray .25pt;
	padding:0in;
	mso-padding-alt:0in 0in 1.0pt 0in;
	font-size:14.0pt;
	font-family:"Trebuchet MS";
	mso-bidi-font-family:Arial;
	color:gray;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;
	mso-bidi-font-style:italic;}
h3
	{mso-style-link:"Heading 3 Char";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:.5in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	text-indent:-.5in;
	mso-pagination:widow-orphan;
	page-break-after:avoid;
	mso-outline-level:3;
	mso-list:l0 level3 lfo1;
	tab-stops:list .5in;
	font-size:14.0pt;
	mso-bidi-font-size:13.0pt;
	font-family:"Trebuchet MS";
	mso-fareast-font-family:SimSun;
	mso-bidi-font-family:Arial;
	color:gray;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;}
h4
	{mso-style-link:"Heading 4 Char";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:.5in;
	margin-bottom:0in;
	margin-left:.6in;
	margin-bottom:.0001pt;
	text-indent:-.6in;
	mso-pagination:widow-orphan;
	page-break-after:avoid;
	mso-outline-level:4;
	mso-list:l0 level4 lfo1;
	tab-stops:list .6in;
	font-size:14.0pt;
	font-family:"Trebuchet MS";
	color:gray;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;
	font-weight:normal;
	mso-bidi-font-weight:bold;
	font-style:italic;
	mso-bidi-font-style:normal;}
h5
	{mso-style-link:"Heading 5 Char";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:.5in;
	margin-bottom:0in;
	margin-left:.7in;
	margin-bottom:.0001pt;
	text-indent:-.7in;
	mso-pagination:widow-orphan;
	mso-outline-level:5;
	mso-list:l0 level5 lfo1;
	tab-stops:list .7in;
	font-size:12.0pt;
	mso-bidi-font-size:13.0pt;
	font-family:"Trebuchet MS";
	color:gray;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;
	font-weight:normal;
	mso-bidi-font-weight:bold;
	mso-bidi-font-style:italic;}
h6
	{mso-style-link:"Heading 6 Char";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:.5in;
	margin-bottom:0in;
	margin-left:.8in;
	margin-bottom:.0001pt;
	text-indent:-.8in;
	mso-pagination:widow-orphan;
	mso-outline-level:6;
	mso-list:l0 level6 lfo1;
	tab-stops:list .8in;
	font-size:10.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Trebuchet MS";
	color:gray;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;}
p.MsoHeading7, li.MsoHeading7, div.MsoHeading7
	{mso-style-link:"Heading 7 Char";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:.5in;
	margin-bottom:0in;
	margin-left:.9in;
	margin-bottom:.0001pt;
	text-indent:-.9in;
	mso-pagination:widow-orphan;
	mso-outline-level:7;
	mso-list:l0 level7 lfo1;
	tab-stops:list .9in;
	font-size:10.0pt;
	mso-bidi-font-size:12.0pt;
	font-family:"Trebuchet MS";
	mso-fareast-font-family:SimSun;
	mso-bidi-font-family:"Times New Roman";
	color:gray;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;
	font-style:italic;
	mso-bidi-font-style:normal;}
p.MsoHeading8, li.MsoHeading8, div.MsoHeading8
	{mso-style-link:"Heading 8 Char";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:.5in;
	margin-bottom:0in;
	margin-left:1.0in;
	margin-bottom:.0001pt;
	text-indent:-1.0in;
	mso-pagination:widow-orphan;
	mso-outline-level:8;
	mso-list:l0 level8 lfo1;
	tab-stops:list 1.0in;
	font-size:10.0pt;
	mso-bidi-font-size:12.0pt;
	font-family:"Trebuchet MS";
	mso-fareast-font-family:SimSun;
	mso-bidi-font-family:"Times New Roman";
	color:gray;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;
	mso-bidi-font-style:italic;}
p.MsoHeading9, li.MsoHeading9, div.MsoHeading9
	{mso-style-link:"Heading 9 Char";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:.5in;
	margin-bottom:0in;
	margin-left:1.1in;
	margin-bottom:.0001pt;
	text-indent:-1.1in;
	mso-pagination:widow-orphan;
	mso-outline-level:9;
	mso-list:l0 level9 lfo1;
	tab-stops:list 1.1in;
	font-size:10.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Trebuchet MS";
	mso-fareast-font-family:SimSun;
	mso-bidi-font-family:Arial;
	color:gray;
	mso-fareast-language:ZH-CN;
	mso-bidi-language:AR-SA;}
p.MsoToc1, li.MsoToc1, div.MsoToc1
	{mso-style-update:auto;
	mso-style-next:Normal;
	margin-top:0in;
	margin-right:.5in;
	margin-bottom:0in;
	margin-left:0in;
	margin-bottom:.0001pt;
	text-indent:9.0pt;
	mso-pagination:widow-orphan;
	tab-stops:20.0pt right dotted 6.5in;
	font-size:10.0pt;
	mso-bidi-font-size:14.0pt;
	font-family:Verdana;
	mso-fareast-font-family:SimSun;
	mso-bidi-font-family:"Times New Roman";
	color:#333399;
	mso-fareast-language:JA;
	mso-bidi-language:AR-SA;
	font-weight:bold;
	mso-bidi-font-weight:normal;}
p.MsoToc2, li.MsoToc2, div.MsoToc2
	{mso-style-update:auto;
	mso-style-next:Normal;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:5.0pt;
	margin-left:12.0pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{font-family:"Times New Roman";
	mso-bidi-font-family:"Times New Roman";
	color:#333399;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;
	text-underline:single;}
span.Heading1Char
	{mso-style-name:"Heading 1 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 1";
	mso-ansi-font-size:16.0pt;
	mso-bidi-font-size:16.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:Arial;
	color:#333399;
	mso-font-kerning:16.0pt;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;
	font-weight:bold;}
span.Heading2Char
	{mso-style-name:"Heading 2 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 2";
	mso-ansi-font-size:14.0pt;
	mso-bidi-font-size:14.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:Arial;
	color:gray;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;
	font-weight:bold;
	mso-bidi-font-style:italic;}
span.Heading3Char
	{mso-style-name:"Heading 3 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 3";
	mso-ansi-font-size:13.0pt;
	mso-bidi-font-size:13.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-fareast-font-family:SimSun;
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:Arial;
	color:gray;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;
	font-weight:bold;}
span.Heading4Char
	{mso-style-name:"Heading 4 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 4";
	mso-ansi-font-size:14.0pt;
	mso-bidi-font-size:14.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:"Times New Roman";
	color:gray;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;
	mso-bidi-font-weight:bold;
	font-style:italic;
	mso-bidi-font-style:normal;}
span.Heading5Char
	{mso-style-name:"Heading 5 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 5";
	mso-ansi-font-size:13.0pt;
	mso-bidi-font-size:13.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:"Times New Roman";
	color:gray;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;
	mso-bidi-font-weight:bold;
	mso-bidi-font-style:italic;}
span.Heading6Char
	{mso-style-name:"Heading 6 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 6";
	mso-ansi-font-size:10.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:"Times New Roman";
	color:gray;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;
	font-weight:bold;}
span.Heading7Char
	{mso-style-name:"Heading 7 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 7";
	mso-ansi-font-size:12.0pt;
	mso-bidi-font-size:12.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-fareast-font-family:SimSun;
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:"Times New Roman";
	color:gray;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;
	font-style:italic;
	mso-bidi-font-style:normal;}
span.Heading8Char
	{mso-style-name:"Heading 8 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 8";
	mso-ansi-font-size:12.0pt;
	mso-bidi-font-size:12.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-fareast-font-family:SimSun;
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:"Times New Roman";
	color:gray;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;
	mso-bidi-font-style:italic;}
span.Heading9Char
	{mso-style-name:"Heading 9 Char";
	mso-style-locked:yes;
	mso-style-link:"Heading 9";
	mso-ansi-font-size:10.0pt;
	font-family:"Trebuchet MS";
	mso-ascii-font-family:"Trebuchet MS";
	mso-fareast-font-family:SimSun;
	mso-hansi-font-family:"Trebuchet MS";
	mso-bidi-font-family:Arial;
	color:gray;
	mso-ansi-language:X-NONE;
	mso-fareast-language:ZH-CN;}
p.ListParagraph, li.ListParagraph, div.ListParagraph
	{mso-style-name:"List Paragraph";
	margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:Calibri;}
p.ListParagraphCxSpFirst, li.ListParagraphCxSpFirst, div.ListParagraphCxSpFirst
	{mso-style-name:"List ParagraphCxSpFirst";
	mso-style-type:export-only;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:Calibri;}
p.ListParagraphCxSpMiddle, li.ListParagraphCxSpMiddle, div.ListParagraphCxSpMiddle
	{mso-style-name:"List ParagraphCxSpMiddle";
	mso-style-type:export-only;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:Calibri;}
p.ListParagraphCxSpLast, li.ListParagraphCxSpLast, div.ListParagraphCxSpLast
	{mso-style-name:"List ParagraphCxSpLast";
	mso-style-type:export-only;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:Calibri;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
span.GramE
	{mso-style-name:"";
	mso-gram-e:yes;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
 /* List Definitions */
 @list l0
	{mso-list-id:192574070;
	mso-list-template-ids:-935719460;}
@list l0:level1
	{mso-level-style-link:"Heading 1";
	mso-level-text:%1;
	mso-level-tab-stop:.3in;
	mso-level-number-position:left;
	margin-left:.3in;
	text-indent:-.3in;
	mso-bidi-font-family:"Times New Roman";}
@list l0:level2
	{mso-level-style-link:"Heading 2";
	mso-level-text:"%1\.%2";
	mso-level-tab-stop:.4in;
	mso-level-number-position:left;
	margin-left:.4in;
	text-indent:-.4in;
	mso-bidi-font-family:"Times New Roman";}
@list l0:level3
	{mso-level-style-link:"Heading 3";
	mso-level-text:"%1\.%2\.%3";
	mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	margin-left:.5in;
	text-indent:-.5in;
	mso-bidi-font-family:"Times New Roman";}
@list l0:level4
	{mso-level-style-link:"Heading 4";
	mso-level-text:"%1\.%2\.%3\.%4";
	mso-level-tab-stop:.6in;
	mso-level-number-position:left;
	margin-left:.6in;
	text-indent:-.6in;
	mso-bidi-font-family:"Times New Roman";}
@list l0:level5
	{mso-level-style-link:"Heading 5";
	mso-level-text:"%1\.%2\.%3\.%4\.%5";
	mso-level-tab-stop:.7in;
	mso-level-number-position:left;
	margin-left:.7in;
	text-indent:-.7in;
	mso-bidi-font-family:"Times New Roman";}
@list l0:level6
	{mso-level-style-link:"Heading 6";
	mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6";
	mso-level-tab-stop:.8in;
	mso-level-number-position:left;
	margin-left:.8in;
	text-indent:-.8in;
	mso-bidi-font-family:"Times New Roman";}
@list l0:level7
	{mso-level-style-link:"Heading 7";
	mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7";
	mso-level-tab-stop:.9in;
	mso-level-number-position:left;
	margin-left:.9in;
	text-indent:-.9in;
	mso-bidi-font-family:"Times New Roman";}
@list l0:level8
	{mso-level-style-link:"Heading 8";
	mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8";
	mso-level-tab-stop:1.0in;
	mso-level-number-position:left;
	margin-left:1.0in;
	text-indent:-1.0in;
	mso-bidi-font-family:"Times New Roman";}
@list l0:level9
	{mso-level-style-link:"Heading 9";
	mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9";
	mso-level-tab-stop:1.1in;
	mso-level-number-position:left;
	margin-left:1.1in;
	text-indent:-1.1in;
	mso-bidi-font-family:"Times New Roman";}
@list l1
	{mso-list-id:557133751;
	mso-list-type:hybrid;
	mso-list-template-ids:1564912368 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
	{mso-level-text:"%1\)";
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-bidi-font-family:"Times New Roman";}
@list l2
	{mso-list-id:740905829;
	mso-list-type:hybrid;
	mso-list-template-ids:-818108090 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l2:level1
	{mso-level-text:"%1\)";
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-bidi-font-family:"Times New Roman";}
@list l3
	{mso-list-id:1546990031;
	mso-list-type:hybrid;
	mso-list-template-ids:1373267878 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l3:level1
	{mso-level-text:"%1\)";
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-bidi-font-family:"Times New Roman";}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
-->
</style>
<!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:Calibri;
	mso-ansi-language:#0400;
	mso-fareast-language:#0400;
	mso-bidi-language:#0400;}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="2050"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link="#333399" vlink=purple style='tab-interval:.5in'>

<div class=Section1>

<p class=MsoNormal>Document number: N2815=09-0005</p>

<p class=MsoNormal>2009-01-25</p>

<p class=MsoNormal>Rani Sharoni &lt;<a href="mailto:rani_sharoni@hotmail.com">rani_sharoni@hotmail.com</a>&gt;</p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid #333399 1.0pt;
mso-border-bottom-alt:solid #333399 .25pt;padding:0in 0in 1.0pt 0in'>

<p class=MsoNormal style='margin-top:15.0pt;margin-right:0in;margin-bottom:
9.0pt;margin-left:0in;border:none;mso-border-bottom-alt:solid #333399 .25pt;
padding:0in;mso-padding-alt:0in 0in 1.0pt 0in'><b style='mso-bidi-font-weight:
normal'><span style='font-size:14.0pt;font-family:"Trebuchet MS";color:#333399;
mso-fareast-language:JA'>Improving the standard librarys exception
specifications<o:p></o:p></span></b></p>

<p class=MsoNormal style='margin-top:15.0pt;margin-right:0in;margin-bottom:
9.0pt;margin-left:0in;border:none;mso-border-bottom-alt:solid #333399 .25pt;
padding:0in;mso-padding-alt:0in 0in 1.0pt 0in'><b style='mso-bidi-font-weight:
normal'><span style='font-size:14.0pt;font-family:"Trebuchet MS";color:#333399;
mso-fareast-language:JA'>Table of Contents<o:p></o:p></span></b></p>

</div>

<p class=MsoToc1><!--[if supportFields]><span style='mso-element:field-begin'></span><span
style='mso-spacerun:yes'></span>TOC \o &quot;1-3&quot; \h \z \u <span
style='mso-element:field-separator'></span><![endif]--><span
class=MsoHyperlink><span style='font-family:Verdana;mso-no-proof:yes'><a
href="#_Toc220641574">1<span style='font-size:12.0pt;font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";color:windowtext;mso-fareast-language:
EN-US;mso-bidi-language:HE;font-weight:normal;text-decoration:none;text-underline:
none'><span style='mso-tab-count:1'> </span></span>Introduction<span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-begin'></span></span><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
_Toc220641574 \h </span><span style='display:none;mso-hide:screen;text-decoration:
none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'>1</span><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
 <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300320032003000360034003100350037003400000000000020020005200050</w:data>
</xml><![endif]--></span><!--[if supportFields]><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:
HE;font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span style='font-family:Verdana;
mso-no-proof:yes'><a href="#_Toc220641575">2<span style='font-size:12.0pt;
font-family:"Times New Roman";mso-fareast-font-family:"Times New Roman";
color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:HE;font-weight:
normal;text-decoration:none;text-underline:none'><span style='mso-tab-count:
1'> </span></span>Containers<span style='display:none;mso-hide:screen;
text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-begin'></span></span><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
_Toc220641575 \h </span><span style='display:none;mso-hide:screen;text-decoration:
none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'>1</span><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
 <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300320032003000360034003100350037003500000000FFFF616C0000900100</w:data>
</xml><![endif]--></span><!--[if supportFields]><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:
HE;font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></p>

<p class=MsoToc2 style='tab-stops:48.0pt right dotted 467.5pt'><span
class=MsoHyperlink><span style='mso-no-proof:yes'><a href="#_Toc220641576"><span
style='mso-bidi-language:AR-SA'>2.1</span><span style='color:windowtext;
text-decoration:none;text-underline:none'><span style='mso-tab-count:1'> </span></span><span
style='mso-bidi-language:AR-SA'>vector capacity</span><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span style='mso-element:field-begin'></span></span><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc220641576 \h </span><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'></span></span><![endif]--><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>3</span><span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
 <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300320032003000360034003100350037003600000000000000000000000000</w:data>
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
style='mso-no-proof:yes'><o:p></o:p></span></p>

<p class=MsoToc2 style='tab-stops:48.0pt right dotted 467.5pt'><span
class=MsoHyperlink><span style='mso-no-proof:yes'><a href="#_Toc220641577"><span
style='mso-bidi-language:AR-SA'>2.2</span><span style='color:windowtext;
text-decoration:none;text-underline:none'><span style='mso-tab-count:1'> </span></span><span
style='mso-bidi-language:AR-SA'>operator[]</span><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span style='mso-element:field-begin'></span></span><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc220641577 \h </span><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'></span></span><![endif]--><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>3</span><span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
 <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300320032003000360034003100350037003700000000000000000000480000</w:data>
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
style='mso-no-proof:yes'><o:p></o:p></span></p>

<p class=MsoToc2 style='tab-stops:48.0pt right dotted 467.5pt'><span
class=MsoHyperlink><span style='mso-no-proof:yes'><a href="#_Toc220641578"><span
style='mso-bidi-language:AR-SA'>2.3</span><span style='color:windowtext;
text-decoration:none;text-underline:none'><span style='mso-tab-count:1'> </span></span><span
style='mso-bidi-language:AR-SA'>basic_string</span><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span style='mso-element:field-begin'></span></span><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc220641578 \h </span><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'></span></span><![endif]--><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>3</span><span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
 <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300320032003000360034003100350037003800000000FCFF1F002000000000</w:data>
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
style='mso-no-proof:yes'><o:p></o:p></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span style='font-family:Verdana;
mso-no-proof:yes'><a href="#_Toc220641579">3<span style='font-size:12.0pt;
font-family:"Times New Roman";mso-fareast-font-family:"Times New Roman";
color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:HE;font-weight:
normal;text-decoration:none;text-underline:none'><span style='mso-tab-count:
1'> </span></span>Iterators<span style='display:none;mso-hide:screen;
text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-begin'></span></span><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
_Toc220641579 \h </span><span style='display:none;mso-hide:screen;text-decoration:
none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'>4</span><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
 <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300320032003000360034003100350037003900000000000000000000000000</w:data>
</xml><![endif]--></span><!--[if supportFields]><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:
HE;font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span style='font-family:Verdana;
mso-no-proof:yes'><a href="#_Toc220641580">4<span style='font-size:12.0pt;
font-family:"Times New Roman";mso-fareast-font-family:"Times New Roman";
color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:HE;font-weight:
normal;text-decoration:none;text-underline:none'><span style='mso-tab-count:
1'> </span></span>Algorithms<span style='display:none;mso-hide:screen;
text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-begin'></span></span><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
_Toc220641580 \h </span><span style='display:none;mso-hide:screen;text-decoration:
none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'>5</span><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
 <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300320032003000360034003100350038003000000000000000000000000000</w:data>
</xml><![endif]--></span><!--[if supportFields]><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:
HE;font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></p>

<p class=MsoToc1><span class=MsoHyperlink><span style='font-family:Verdana;
mso-no-proof:yes'><a href="#_Toc220641581">5<span style='font-size:12.0pt;
font-family:"Times New Roman";mso-fareast-font-family:"Times New Roman";
color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:HE;font-weight:
normal;text-decoration:none;text-underline:none'><span style='mso-tab-count:
1'> </span></span>Default and move constructors<span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-begin'></span></span><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
_Toc220641581 \h </span><span style='display:none;mso-hide:screen;text-decoration:
none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'>5</span><span
style='display:none;mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
 <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630032003200300036003400310035003800310000000000001EFF1F00000000</w:data>
</xml><![endif]--></span><!--[if supportFields]><span style='display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:windowtext;mso-fareast-language:EN-US;mso-bidi-language:
HE;font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></p>

<p class=MsoNormal><!--[if supportFields]><span style='mso-element:field-end'></span><![endif]--><o:p>&nbsp;</o:p></p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid #333399 1.0pt;
mso-border-bottom-alt:solid #333399 .25pt;padding:0in 0in 1.0pt 0in'>

<h1><a name="_Toc220641574"><![if !supportLists]><span style='mso-fareast-font-family:
"Trebuchet MS";mso-bidi-font-family:"Trebuchet MS"'><span style='mso-list:Ignore'>1<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span dir=LTR>Introduction</span></a></h1>

</div>

<p class=MsoNormal>The current standard librarys exception specifications
seems to be lacking in the sense that many operations that expected to have
no-fail guarantee under certain conditions are not explicitly specified as
such.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Having no-fail guarantee for certain operations is important
to avoid error prone usability in which the operations are used in no-fail
context (e.g. destructor) with the false assumption that they cant throw. For
example, unregister function using identifier key is usually a no-fail
operation that might require lookup in associative container and therefore it
cant use <span class=SpellE>std::map</span> if <span class=SpellE>map::find</span>
might fail. </p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Another concern is the ability to verify whether existing
code is correct according to the standard when operation that might throw is
actually not throwing in any existing implementation. Later on if the
implementation will start throwing then it might silently break existing code.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Judging by the famous The C++ programming language
appendix E by <span class=SpellE>Bjarne</span> <span class=SpellE>Stroustrup</span>
it appears that <span class=SpellE>Stroustrup</span> actually think that the
standard already mandating some no-fail guarantees for certain operations and I
mention that few times in this paper.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Im using the term failure for errors that can be handled by
the caller. This also includes exceptions for which no-fail is no-throw.</p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid #333399 1.0pt;
mso-border-bottom-alt:solid #333399 .25pt;padding:0in 0in 1.0pt 0in'>

<h1><a name="_Toc220641575"><![if !supportLists]><span style='mso-fareast-font-family:
"Trebuchet MS";mso-bidi-font-family:"Trebuchet MS"'><span style='mso-list:Ignore'>2<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span dir=LTR>Containers</span></a></h1>

</div>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>The following non-mutating operations should have unconditional no-fail
guarantee:<o:p></o:p></span></p>

<p class=MsoNormal><span class=GramE><span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>size</span></span><span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>, empty, <span class=SpellE>max_size</span>,
capacity, <span class=SpellE>get_allocator</span>, <span class=SpellE>key_compare</span>
and <span class=SpellE>value_compare</span>.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span class=SpellE><span class=GramE><span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>Iterators</span></span></span><span
style='mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'> creation functions
should have unconditional no-fail guarantee:<o:p></o:p></span></p>

<p class=MsoNormal><span class=GramE><span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>begin</span></span><span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>, end, <span class=SpellE>rbegin</span> and
rend.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Non-mutating operations that depend on comparison function should have
unconditional no-fail guarantee unless the underlying comparison throws:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Containers operators ==, &lt;, <span class=GramE>!=</span>,
&gt;, &gt;= and &lt;=.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Associative containers operations: find, count, <span class=SpellE>lower_bound</span>
and <span class=SpellE>equal_range</span>.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Proposed wording:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal>23.1.1 <span class=GramE>paragraph</span> 10, add the following
requirements:</p>

<p class=MsoNormal>- No <span class=GramE><span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>size(</span></span><span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>), empty(), <span class=SpellE>max_size</span>(),
begin(), end(), <span class=SpellE>cbegin</span>(), <span class=SpellE>cend</span>(),
<span class=SpellE>rbegin</span>() or rend() function throws an exception.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No </span>container <span class=SpellE>iterators</span> member
function throws an exception.</p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No </span>container <span class=SpellE>iterators</span> comparison operator
throws an exception.</p>

<p class=MsoNormal>- No containers <span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>==, &lt;, <span class=GramE>!=</span>, &gt;,
&gt;= or &lt;= operator throws an exception unless that exception is thrown
by the contained object related comparison operator as defined by table 80. </span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No <span class=SpellE>get_<span class=GramE>allocator</span></span><span
class=GramE>(</span>) function throw an exception unless that exception is
thrown by the returned type copy or default constructor.</span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>23.1.3 <span class=GramE>add</span> to the end of paragraphs 13:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>14 No <span class=GramE>at(</span>) throws if n &lt; <span class=SpellE>a.size</span>().<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>23.1.3 <span class=GramE>add</span> paragraphs 14:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>14 No <span class=GramE>front(</span>), back() or operator[] throws an
exception.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>23.1.4.1 <span class=GramE>add</span> paragraphs 4,5 and 6:<o:p></o:p></span></p>

<p class=MsoNormal><span class=GramE><span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>4<span style='mso-spacerun:yes'> </span>No</span></span><span
style='mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'> find(), count(), <span
class=SpellE>lower_bound</span>() or <span class=SpellE>equal_range</span>()
function throws an exception unless that exception is throws by the containers
<span class=SpellE>Pred</span> object (if any). <o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal>5 No <span class=GramE>operator[</span>] or at() function
throws an exception if the looked up element is present <span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>unless that exception is throws by the
containers <span class=SpellE>Pred</span> object (if any). <o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span class=GramE><span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>6<span style='mso-spacerun:yes'> </span>No</span></span><span
style='mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'> <span class=SpellE>key_compare</span>()
or <span class=SpellE>value_compare</span>() function throws an exception
unless that exception is thrown by the returned type copy or default
constructor</span>.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>23.1.5.1 <span class=GramE>add</span> paragraphs 5, 6 and 7:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>5<span style='mso-spacerun:yes'> </span>No find(), count(), <span
class=SpellE>equal_range</span>(),<span style='mso-spacerun:yes'> </span><span
class=SpellE>bucket_count</span>(), <span class=SpellE>max_bucket_count</span>(),
bucket(), begin(n), end(n), <span class=SpellE>cbegin</span>(n), <span
class=SpellE>cend</span>(n), <span class=SpellE>bucket_size</span>(), <span
class=SpellE>load_factor</span>() and <span class=SpellE>max_load_factor</span>()
function throws an exception unless that exception is throws by the containers
Hash or <span class=SpellE>Pred</span> object (if any). <o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal>6 No <span class=GramE>operator[</span>] or at() function
throws an exception if the looked up element is present <span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>unless that exception is throws by the
containers Hash or <span class=SpellE>Pred</span> object (if any). <o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span class=GramE><span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>7<span style='mso-spacerun:yes'> </span>No</span></span><span
style='mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'> <span class=SpellE>hash_function</span>()
or <span class=SpellE>key_eq</span>() function throws an exception unless that
exception is thrown by the returned type copy or default constructor</span>.</p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid gray 1.0pt;
mso-border-bottom-alt:solid gray .25pt;padding:0in 0in 1.0pt 0in'>

<h2><a name="_Toc220641576"><![if !supportLists]><span style='mso-fareast-font-family:
"Trebuchet MS";mso-bidi-font-family:"Trebuchet MS"'><span style='mso-list:Ignore'>2.1<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]></a><span
class=GramE><span style='mso-bookmark:_Toc220641576'>vector</span></span><span
style='mso-bookmark:_Toc220641576'> capacity</span></h2>

</div>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>According to the standard the reason for having capacity (23.2.4.2) in addition
to size is in order to control the vectors internal allocations. Thats mainly
useful for efficiency but also for having no-fail guarantee for insertion
operations of objects with non-throwing default, copy constructor and
assignment operator.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>The standard should explicitly say that vector insertion operations
(i.e. operator=, assign, resize, insert, <span class=SpellE>push_back</span>
and <span class=SpellE>push_front</span>) should not fail if there is
sufficient capacity and the contained object copying is not throwing.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span class=SpellE><span class=GramE><span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>shrink_to_fit</span></span></span><span
style='mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'> is new vector/<span
class=SpellE>basic_string</span> member for non-binding request to change the
capacity. <span class=SpellE><span class=GramE>shrink_to_fit</span></span>
should not throw to make it easier to write compliant code using various
implementations.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Proposed wording:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>23.2.6 <span class=GramE>add</span> paragraphs 3 and 4:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>3 No operator<span class=GramE>=(</span>), assign(), resize(), insert(),
<span class=SpellE>shrink_to_fit</span>(), <span class=SpellE>push_back</span>()
or <span class=SpellE>push_front</span>() function throws an exception if there
is sufficient capacity unless the contained object copy, move constructor or
assignment operator throws.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span class=GramE><span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>4 <span style='mso-spacerun:yes'></span>No</span></span><span
style='mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'> capacity() or
data() function throws an exception.<o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid gray 1.0pt;
mso-border-bottom-alt:solid gray .25pt;padding:0in 0in 1.0pt 0in'>

<h2><a name="_Toc220641577"><![if !supportLists]><span style='mso-fareast-font-family:
"Trebuchet MS";mso-bidi-font-family:"Trebuchet MS"'><span style='mso-list:Ignore'>2.2<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]></a><span
class=GramE><span style='mso-bookmark:_Toc220641577'>operator[]</span></span><span
style='mso-bookmark:_Toc220641577'></span></h2>

</div>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>For vector and <span class=SpellE>deque</span> operator[X] is defined as
*(<span class=SpellE><span class=GramE>a.begin</span></span><span class=GramE>(</span>)
+ X) and due the <span class=SpellE>iterators</span> requirements proposal below
it cant throw for valid access. Same applies for <span class=GramE>at(</span>).<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>operator[key] for associative containers is more problematic since
though its often used for lookup its actually an insertion operation for
which creation of pair with the key and default value is required (23.3.1.2).<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Requiring no-fail in case that the object already exist make-sense but
it requires to change the definition of maps <span class=GramE>operator[</span>]
(better to avoid over-specifying definition via code). <o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Notice that existing implementations (e.g. <span class=SpellE>Dinkumware</span>
and <span class=SpellE>libstdc</span>++) already have the no-fail <span
class=GramE>guarantee</span> for lookup cases using <span class=SpellE>lower_bound</span>.
This also seems to be implied by the current N2800 draft.<o:p></o:p></span></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Proposed wording added in this papers section 2.<o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid gray 1.0pt;
mso-border-bottom-alt:solid gray .25pt;padding:0in 0in 1.0pt 0in'>

<h2><a name="_Toc220641578"><![if !supportLists]><span style='mso-fareast-font-family:
"Trebuchet MS";mso-bidi-font-family:"Trebuchet MS"'><span style='mso-list:Ignore'>2.3<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]></a><span
class=SpellE><span style='mso-bookmark:_Toc220641578'>basic_string</span></span><span
style='mso-bookmark:_Toc220641578'></span></h2>

</div>

<p class=MsoNormal><span class=SpellE><span class=GramE>basic_string</span></span>
is not an official container but its actually very similar to <span
class=SpellE>std::vector</span>.</p>

<p class=MsoNormal><span class=SpellE><span class=GramE>basic_string</span></span>
is more restrictive than vector in the sense that it can only contain POD types
(21/1) and its traits are not throwing (21.1.1/1). </p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>On the other hand, the current specifications of <span
class=SpellE>basic_string</span> are intended to allow reference counted
strings for which copy-on-write (COW) is essential. COW makes many of the
traditionally no-fail operations to have might-throw behavior. For example, the
non-const <span class=GramE>operator[</span>] might throw for valid access in
case that the reference count is more than one.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>COW in operating systems doesnt change the failure
guarantee of specific operation since it will be practically impossible to
program with that in mind. For example writing to static variable of integer
type might trigger COW (e.g. the binary is shared between more than one processes)
but still its a no-fail operation from the programmers point of view. Such
transparency in respect to the usage (i.e. no additional constraints) is
achieved using virtual memory and thats doesnt seem to be the case for <span
class=SpellE>basic_string</span> COW in which optimization is significantly
affecting the usability.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Most STL vendors give option to disable reference counted <span
class=SpellE>basic_string</span> so the standard should explicitly relax the
usability of non reference counted <span class=SpellE>basic_string</span>.
Otherwise its practically impossible to write correct code in applications
that requires low memory fault tolerance (e.g. sensitive to read-only usage of
non-const string).</p>

<p class=MsoNormal>The relaxation for non reference counted <span class=SpellE>basic_string</span>
should also be applied for the validity of references, pointers and <span
class=SpellE>iterators</span> that refer to <span class=SpellE>basic_string</span>
(e.g. swap is not invalidating).</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>It seems that for COW implementation cleanup operations like
<span class=GramE>clear(</span>) and erase() can also fail.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Note: I noticed that the original paragraph 23.1/5, which mentioned
reference counted implementations, had been removed so maybe COW is not allowed
anymore per proposal N2668.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Proposed wording:</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>23.2.6 <span class=GramE>add</span> paragraph 5 and 6:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>5 Unless otherwise specified <span class=SpellE>basic_string</span> meet
the following additional requirements:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No const member function throws an exception.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No <span class=GramE>at(</span>) const member function throws an
exception if n &lt; <span class=SpellE>str.size</span>().<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No <span class=SpellE>const_<span style='mso-fareast-language:EN-US;
mso-bidi-language:HE'>iterator</span></span></span> member function throws an
exception.</p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No <span class=SpellE>const_<span style='mso-fareast-language:EN-US;
mso-bidi-language:HE'>iterator</span></span></span> comparison operator throws
an exception.</p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No <span class=SpellE>get_<span class=GramE>allocator</span></span><span
class=GramE>(</span>) function throw an exception unless that exception is
thrown by the returned type copy or default constructor</span>.</p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>6 Unless otherwise specified non copy-on-write <span class=SpellE>basic_string</span>
implementation meet the following additional requirements:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No member function throws if there is sufficient capacity.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No </span><span class=SpellE>iterator</span> member function throws an
exception.</p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No </span><span class=SpellE>iterator</span> comparison operator
throws an exception.</p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No <span class=GramE>at(</span>) member function throws an exception
if n &lt; <span class=SpellE>str.size</span>().<o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid #333399 1.0pt;
mso-border-bottom-alt:solid #333399 .25pt;padding:0in 0in 1.0pt 0in'>

<h1><a name="_Toc220641579"><![if !supportLists]><span style='mso-fareast-font-family:
"Trebuchet MS";mso-bidi-font-family:"Trebuchet MS"'><span style='mso-list:Ignore'>3<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]></a><span class=SpellE><span style='mso-bookmark:
_Toc220641579'>Iterators</span></span><span style='mso-bookmark:_Toc220641579'></span></h1>

</div>

<p class=MsoNormal>All the standard containers <span class=SpellE>iterators</span>
operations should have no-fail guarantee. Non reference counted <span
class=SpellE>basic_string</span> <span class=SpellE>iterators</span> should
also not throw.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span class=SpellE>Bjarne</span> <span class=SpellE>Stroustrup</span>
seems to think that the standard actually already requires such non throwing
behavior from <span class=SpellE>iterators</span>, in Appendix E.4.4 he writes:</p>

<p class=MsoNormal>Note that ++ and -- on an <span class=SpellE>iterator</span>
can throw exceptions. []</p>

<p class=MsoNormal>However, they cannot throw exceptions when moving an <span
class=SpellE>iterator</span> from one element of a sequence to another, without
violating the definition of ++ and -- on an <span class=SpellE>iterator</span>.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>In Appendix E.7 <span class=SpellE>Stroustrup</span> also
advise:</p>

<p class=MsoNormal>Dont throw an exception from an <span class=SpellE>iterator</span>
navigating a valid sequence.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Proposed wording added in this papers section 2.<o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid #333399 1.0pt;
mso-border-bottom-alt:solid #333399 .25pt;padding:0in 0in 1.0pt 0in'>

<h1><a name="_Toc220641580"><![if !supportLists]><span style='mso-fareast-font-family:
"Trebuchet MS";mso-bidi-font-family:"Trebuchet MS"'><span style='mso-list:Ignore'>4<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span dir=LTR>Algorithms</span></a></h1>

</div>

<p class=MsoNormal>All algorithms should not throw an exception unless the
exception was originated from user defined operation.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span class=SpellE>Bjarne</span> <span class=SpellE>Stroustrup</span>
specifies this explicitly in Appendix E.5.3:</p>

<p class=MsoNormal>The algorithms themselves do not throw exceptions. Instead,
they report errors and failures through their return values. []</p>

<p class=MsoNormal>Thus, exceptions thrown from a standard algorithm must
originate from a user-supplied operation. That is, the exception must come from
an operation on an element  such as a predicate, an assignment, or a swap or
from an allocator.</p>

<p class=MsoNormal>&lt;/quote&gt;</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Notice that <span class=SpellE>std:<span class=GramE>:list</span>::sort</span>
specialized algorithm might throw in typical implementations in which the
lists default constructor might throw. </p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Proposed wording:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>25 add paragraph 3:<o:p></o:p></span></p>

<p class=MsoNormal>3 No algorithm throws an exception unless <span
style='mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'>that exception is
throws by a user defined operation used by the algorithm.</span> </p>

<div style='mso-element:para-border-div;border:none;border-bottom:solid #333399 1.0pt;
mso-border-bottom-alt:solid #333399 .25pt;padding:0in 0in 1.0pt 0in'>

<h1><a name="_Toc220641581"><![if !supportLists]><span style='mso-fareast-font-family:
"Trebuchet MS";mso-bidi-font-family:"Trebuchet MS"'><span style='mso-list:Ignore'>5<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span dir=LTR>Default and move constructors</span></a></h1>

</div>

<p class=MsoNormal>I refer to constructor that accepts <span class=SpellE>rvalue</span>-reference
of the same type as move constructor (e.g. X::X(X&amp;&amp;)).</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Notice that default and move constructor of containers are
tightly related due to the clear operations, for example consider the
following:</p>

<p class=MsoNormal><span class=GramE>string</span> str1(<span class=SpellE>abc</span>);</p>

<p class=MsoNormal><span class=GramE>string</span> str2 = <span class=SpellE>std::move</span>(str1);</p>

<p class=MsoNormal><span class=GramE>str1.clear(</span>); // str1 is now like
default constructed string</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>The above indicates that throwing default constructor
usually implies throwing move constructor. Its interesting to note that the
current C++0x draft specifies that <span class=SpellE>basic_string</span> move
constructor is not throwing.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>The current standard allows to both default and move constructors
of containers to throw an exception while it seems that in practice there is no
good reason for throwing from such constructors of several containers.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Such no-fail guarantee relaxation will allow some useful use
cases:</p>

<p class=ListParagraphCxSpFirst style='text-indent:-.25in;mso-list:l3 level1 lfo3'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>1)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR>No fail transfer of ownership.</span></p>

<p class=ListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l3 level1 lfo3'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>2)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR>Safe cleanup outside of lock.</span></p>

<p class=ListParagraphCxSpLast style='text-indent:-.25in;mso-list:l3 level1 lfo3'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>3)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR>Creating wrapper that translate exceptions to error codes.</span></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Some operations, like <span class=SpellE>vector::push_back</span>
(23.2.6.4/1), require non-throwing move constructors (for the favor of strong
exception safety) which mean that they cant be used with standard containers
(e.g. vector&lt; list&lt;<span class=SpellE>int</span>&gt; &gt;). Disallowing
throwing move constructors might be too restrictive by itself since common way
to implement move is by default construction (that might throw) + swap. It
might be better to allow throwing move constructors with basic guarantee than
to disallow it (silently) for legit use cases.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>The following containers are typically implemented with
no-fail guarantee for default constructor:</p>

<p class=ListParagraphCxSpFirst style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>1)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR>vector  capacity zero requires no allocation </span></p>

<p class=ListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>2)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR><span class=SpellE>basic_string</span>  same as vector</span></p>

<p class=ListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>3)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR>list  head of the list can be a member</span></p>

<p class=ListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>4)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR><span class=SpellE>deque</span>  same as list</span></p>

<p class=ListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>5)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR>map  same as list</span></p>

<p class=ListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>6)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR><span class=SpellE>multi_map</span>  same as map</span></p>

<p class=ListParagraphCxSpLast style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>7)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
dir=LTR>set  same as map</span></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Non-throwing default constructor implies non-throwing move
constructor since the later can be implemented using default construction and
swap.</p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>On the other hand, in might be unreasonable to force the
implementation for having non-throwing default constructor for hash tables and that
will be the same for the move constructor. </p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>The <span class=SpellE><span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'>Dinkumware</span></span><span style='mso-fareast-language:
ZH-CN;mso-bidi-language:AR-SA'> implementation used by VC2008 might throw from
the default constructor of node based containers. Ive been told that this is
essential for validity of the <span class=GramE>end(</span>) <span
class=SpellE>iterator</span> after operations like swap. The same
implementation can also throw when compiled in secure STL mode for all
containers. <o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Proposed wording for containers (might be controversial):<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>23.1.1 <span class=GramE>paragraph</span> 10 add sub-bullet:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No </span>container <span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>move constructor throws an exception unless that exception
is thrown by the allocators default or copy constructor.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>- No </span>container <span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>default constructor throws an exception unless that
exception is thrown by the allocators default or copy constructor.<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Proposed wording for <span class=SpellE>basic_string</span>:<o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>21.3.2 <span class=GramE>add</span> to paragraph 1:<o:p></o:p></span></p>

<p class=MsoNormal><span class=GramE><span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'>Throws: Nothing if the allocator's move constructor
throws nothing.</span></span><span style='mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA'><o:p></o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:14.0pt;font-family:"Trebuchet MS";color:#333399;mso-fareast-language:
JA'>Acknowledgements<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'>Thanks to Howard <span class=SpellE>Hinnant</span> and Dave Abrahams for
reviewing this paper.<o:p></o:p></span></p>

</div>

</body>

</html>
