<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:m="http://schemas.microsoft.com/office/2004/12/omml"
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 12">
<meta name=Originator content="Microsoft Word 12">
<link rel=File-List href="Non-member%20size%20and%20more_files/filelist.xml">
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:Author>Riccardo Marcangelo</o:Author>
  <o:LastAuthor>Mr Wimpy</o:LastAuthor>
  <o:Revision>2</o:Revision>
  <o:TotalTime>7114</o:TotalTime>
  <o:LastPrinted>2014-05-21T13:32:00Z</o:LastPrinted>
  <o:Created>2014-05-22T23:41:00Z</o:Created>
  <o:LastSaved>2014-05-22T23:41:00Z</o:LastSaved>
  <o:Pages>3</o:Pages>
  <o:Words>1323</o:Words>
  <o:Characters>7546</o:Characters>
  <o:Lines>62</o:Lines>
  <o:Paragraphs>17</o:Paragraphs>
  <o:CharactersWithSpaces>8852</o:CharactersWithSpaces>
  <o:Version>12.00</o:Version>
 </o:DocumentProperties>
 <o:OfficeDocumentSettings>
  <o:RelyOnVML/>
  <o:AllowPNG/>
 </o:OfficeDocumentSettings>
</xml><![endif]-->
<link rel=dataStoreItem href="Non-member%20size%20and%20more_files/item0006.xml"
target="Non-member%20size%20and%20more_files/props0007.xml">
<link rel=themeData href="Non-member%20size%20and%20more_files/themedata.thmx">
<link rel=colorSchemeMapping
href="Non-member%20size%20and%20more_files/colorschememapping.xml">
<!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:Zoom>120</w:Zoom>
  <w:TrackMoves>false</w:TrackMoves>
  <w:TrackFormatting/>
  <w:PunctuationKerning/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:DoNotPromoteQF/>
  <w:LidThemeOther>EN-GB</w:LidThemeOther>
  <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:SplitPgBreakAndParaMark/>
   <w:DontVertAlignCellWithSp/>
   <w:DontBreakConstrainedForcedTables/>
   <w:DontVertAlignInTxbx/>
   <w:Word11KerningPairs/>
   <w:CachedColBalance/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
  <m:mathPr>
   <m:mathFont m:val="Cambria Math"/>
   <m:brkBin m:val="before"/>
   <m:brkBinSub m:val="&#45;-"/>
   <m:smallFrac m:val="off"/>
   <m:dispDef/>
   <m:lMargin m:val="0"/>
   <m:rMargin m:val="0"/>
   <m:defJc m:val="centerGroup"/>
   <m:wrapIndent m:val="1440"/>
   <m:intLim m:val="subSup"/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
  <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
  <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
 </w:LatentStyles>
</xml><![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:1;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:modern;
	mso-font-pitch:fixed;
	mso-font-signature:-520092929 1073806591 9 0 415 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
h1
	{mso-style-priority:9;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-link:"Heading 1 Char";
	mso-style-next:Normal;
	margin-top:24.0pt;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:0cm;
	margin-bottom:.0001pt;
	line-height:115%;
	mso-pagination:widow-orphan lines-together;
	page-break-after:avoid;
	mso-outline-level:1;
	font-size:14.0pt;
	font-family:"Cambria","serif";
	mso-ascii-font-family:Cambria;
	mso-ascii-theme-font:major-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:major-fareast;
	mso-hansi-font-family:Cambria;
	mso-hansi-theme-font:major-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:major-bidi;
	color:#365F91;
	mso-themecolor:accent1;
	mso-themeshade:191;
	mso-font-kerning:0pt;
	mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:blue;
	mso-themecolor:hyperlink;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	mso-themecolor:followedhyperlink;
	text-decoration:underline;
	text-underline:single;}
pre
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"HTML Preformatted Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:Consolas;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:36.0pt;
	mso-add-space:auto;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:36.0pt;
	mso-add-space:auto;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
span.Heading1Char
	{mso-style-name:"Heading 1 Char";
	mso-style-priority:9;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Heading 1";
	mso-ansi-font-size:14.0pt;
	mso-bidi-font-size:14.0pt;
	font-family:"Cambria","serif";
	mso-ascii-font-family:Cambria;
	mso-ascii-theme-font:major-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:major-fareast;
	mso-hansi-font-family:Cambria;
	mso-hansi-theme-font:major-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:major-bidi;
	color:#365F91;
	mso-themecolor:accent1;
	mso-themeshade:191;
	font-weight:bold;}
span.HTMLPreformattedChar
	{mso-style-name:"HTML Preformatted Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"HTML Preformatted";
	font-family:Consolas;
	mso-ascii-font-family:Consolas;
	mso-hansi-font-family:Consolas;
	mso-bidi-font-family:Consolas;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
@page WordSection1
	{size:595.3pt 841.9pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:35.4pt;
	mso-footer-margin:35.4pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
-->
</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-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-fareast-language:EN-US;}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="37890"/>
</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-GB link=blue vlink=purple style='tab-interval:36.0pt'>

<div class=WordSection1>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=619
 style='width:464.25pt;border-collapse:collapse;mso-yfti-tbllook:1184;
 mso-padding-alt:0cm 0cm 0cm 0cm'>
 <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
  <td width=167 valign=top style='width:125.25pt;padding:0cm 0cm 0cm 0cm'></td>
  <td width=452 style='width:339.0pt;padding:0cm 0cm 0cm 0cm'></td>
 </tr>
 <tr style='mso-yfti-irow:1'>
  <td width=167 valign=top style='width:125.25pt;padding:0cm 0cm 0cm 0cm'></td>
  <td width=452 style='width:339.0pt;padding:0cm 0cm 0cm 0cm'></td>
 </tr>
 <tr style='mso-yfti-irow:2'>
  <td width=167 valign=top style='width:125.25pt;padding:0cm 0cm 0cm 0cm'></td>
  <td width=452 style='width:339.0pt;padding:0cm 0cm 0cm 0cm'></td>
 </tr>
 <tr style='mso-yfti-irow:3;mso-yfti-lastrow:yes'>
  <td width=167 valign=top style='width:125.25pt;padding:0cm 0cm 0cm 0cm'></td>
  <td width=452 style='width:339.0pt;padding:0cm 0cm 0cm 0cm'></td>
 </tr>
</table>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>Document number:<span
style='mso-bidi-font-style:italic'> N4017<o:p></o:p></span></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>Date:<span style='mso-bidi-font-style:
italic'> 2014-05-22<o:p></o:p></span></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>Project: Programming Language C++,
Library Evolution Working Group<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>Reply-to: Riccardo Marcangelo
&lt;ricky.65@outlook.com&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><b
style='mso-bidi-font-weight:normal'><span style='font-size:12.0pt;line-height:
115%'>Non-member size() and more<o:p></o:p></span></b></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%'>Introduction<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>This is a proposal
to add non-member std::size and other useful utility functions (std::empty,
std::front, std::back, and std::data). The inclusion of these functions would
provide benefits in regards to safety, efficiency, and generality.<o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%'>Motivation And Scope<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>A common
task in C++ is to determine the number of elements in a built-in C array,
especially when working with legacy code. This is usually achieved using the
sizeof operator by taking the size of the entire array and dividing it by the
size of a single element. For example, sizeof(a)/sizeof(*(a)) where a is an
array. For convenience, this is often wrapped in a macro with a name such as
&quot;ARRAYSIZE&quot; or &quot;countof&quot;.<span style='mso-spacerun:yes'>
</span>For example:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>#define
ARRAYSIZE(a) (sizeof(a)/sizeof(*(a)))<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>The problem
with such a macro is that it isn't type safe. If a pointer is passed instead of
a built-in array, code will compile but yield an erroneous result with no
compiler warning or error. More advanced versions such as Microsoft's _countof
macro use extra trickery to issue a compile time error if a pointer is passed
to it.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>In C++11 we
can dispose of a macro and instead use a constexpr function template to return
the number of elements in a built-in array at compile time. Such a function
provides a&nbsp;drop-in replacement for an old macro.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>For example:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>template &lt;class T, std::size_t
N&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>constexpr std::size_t size(const T
(&amp;array)[N]) noexcept<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>{<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><span style='mso-spacerun:yes'>
</span>return N;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>}<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>We can
currently use std::distance(std::begin(c), std::end(c)) to generically obtain
the number of elements for both built-in arrays and Standard containers.
However, as Stephan T. Lavavej pointed out, std::distance is verbose and
inefficient for many containers. The Standard containers have a constant time
size() member function yet std::distance is linear time for containers with a
weaker than random-access iterator (list, the associative containers, and the
unordered associative containers). Another disadvantage of std::distance is
that it is not constexpr.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Writing
about the STL containers in his &quot;Notes on Programming&quot;, Alexander
Stepanov states - &quot;I made size into a member function in STL in an attempt
to please the standard committee. I knew that begin, end and size should be
global functions but was not willing to risk another fight with the
committee.&quot; Thankfully std::begin() and std::end() global functions were
included in C++11 but sadly not a global std::size().<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>It would be
beneficial to unify containers that have a size() member function and built-in
arrays by providing an overload for containers that have a size() member
function. This would enable programmers to simply remember to use std::size()
to determine the number of elements for both built-in arrays and containers
with a size() member function.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Similarly,
it would also be useful to have the non-member functions std::empty(), std::front(),
std::back(), and std::data().<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Example
usage:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>int builtin_one [10] = {1, 2, 3, 4,
5, 6, 7, 8, 9, 10}; <o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::vector&lt;int&gt; vec (5, 13);<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>//non-member size<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>int builtin_two
[std::size(builtin_one)];<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::array&lt;int,
std::size(builtin_one)&gt; arr;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><span style='mso-tab-count:1'> </span><span
style='mso-spacerun:yes'> </span><o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt;
std::size(builtin_one) &lt;&lt; '\n';<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt;
std::size(builtin_two) &lt;&lt; '\n';<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt; std::size(arr)
&lt;&lt; '\n';<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt; std::size(vec)
&lt;&lt; '\n';<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><span style='mso-tab-count:1'> </span><o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>//non-member front/back <o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>//allow the result to be used as an
lvalue<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::front(builtin_two) = 53;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::back(vec) = 11;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt;
std::front(builtin_two) &lt;&lt; '\n';<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt; std::back(vec)
&lt;&lt; '\n';<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><span style='mso-tab-count:1'> </span><o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>//non-member empty<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt; std::boolalpha
&lt;&lt; &quot;std::empty(builtin_one): &quot; &lt;&lt; std::empty(builtin_one)
&lt;&lt; '\n';<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt; &quot;std::empty(vec):
&quot; &lt;&lt; std::empty(vec) &lt;&lt; '\n'; <o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><span style='mso-tab-count:1'> </span><o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>//non-member data<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt;
&quot;std::data(builtin_one): &quot; &lt;&lt; std::data(builtin_one) &lt;&lt;
'\n';<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'>std::cout &lt;&lt;
&quot;std::data(vec): &quot; &lt;&lt; std::data(vec) &lt;&lt; '\n'; <span
style='mso-tab-count:2'> </span><o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>In C++11 an
alternative approach to obtain the number of elements in a built-in array is to
use std::extent. For example: <o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'><span
style='font-size:12.0pt;line-height:115%;mso-bidi-font-weight:bold'>int</span><span
style='font-size:12.0pt;line-height:115%'> array [<span style='mso-bidi-font-weight:
bold'>10</span>];<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>auto
array_size = std::extent&lt;decltype(array)&gt;::value;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Disadvantages
of this approach are that it is verbose and we lose the opportunity to unify built-in
arrays and containers.<o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%'>Impact On The Standard<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>This
proposal is a pure library extension that can be implemented in C++11. <o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%'>Design Decisions<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>I chose not
to provide an overload of std::size() for forward_list. &nbsp;My concern was
that some people may feel that std::size() should always have constant
complexity as all STL containers with a size() member function require it to be
constant. A std::size() overload for forward_list would be the oddball in that
it would have linear complexity.&nbsp;It could be easily included if desired.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Deciding
where these functions should live is something that Committee members may want
to discuss. <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>I suggest
that header &lt;iterator&gt; is the most suitable location for the
aforementioned functions. std::data() returns a pointer and all of the other
proposed functions (std::size(), std::empty(), std::front(), and std::back() )
have their operational semantics defined in terms of begin() and end().
Therefore it appears to be a natural fit that all of these functions should
live together. <o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%'>Question<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>In regards
to the proposed &quot;<span style='mso-bidi-font-weight:bold'>Runtime-sized
arrays with automatic storage duration</span>&quot; in the Array Technical
Specification, is it correct that they cannot be supported here as they cannot
be passed to a function? The same problem exists with std::begin and std::end
for such arrays. Is there anything that can be done?<o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%'>Proposed Wording<o:p></o:p></span></b></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'>Modify
the section 24.3 Header &lt;iterator&gt; synopsis [iterator.synopsis] by adding
the following at the end of the synopsis:<o:p></o:p></span></i></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'>// 24.8,
container access: <o:p></o:p></span></i></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'>//
capacity:</span></i><span style='font-size:12.0pt;line-height:115%'><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr auto size(const C&amp; c) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr size_t size(const T (&amp;array)[N])
noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr bool empty(const C&amp; c) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr bool empty(const T (&amp;array)[N])
noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><i style='mso-bidi-font-style:normal'><span
style='font-size:12.0pt;line-height:115%'>// element access:<o:p></o:p></span></i></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr decltype(auto) front(C&amp; c);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr decltype(auto) front(const C&amp; c);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr decltype(auto) back(C&amp; c);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr decltype(auto) back(const C&amp; c);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr T&amp; front(T (&amp;array)[N]) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr T&amp; back(T (&amp;array)[N]) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><i style='mso-bidi-font-style:normal'><span
style='font-size:12.0pt;line-height:115%'>// data access:<o:p></o:p></span></i></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr auto data(C&amp; c) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr auto data(const C&amp; c) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr T* data(T (&amp;array)[N]) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'><o:p>&nbsp;</o:p></span></i></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'>Add a new
section 24.8 container access [iterator.container]&nbsp;containing the
following:<o:p></o:p></span></i></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>In addition to
being available via inclusion of the &lt;iterator&gt; header, the function
templates in [iterator.container] are also available when any of the following
headers are included: &lt;array&gt;, &lt;deque&gt;, &lt;forward_list&gt;,
&lt;list&gt;, &lt;map&gt;, &lt;regex&gt;, &lt;set&gt;, &lt;string&gt;,
&lt;unordered_map&gt;, &lt;unordered_set&gt;, or &lt;vector&gt;.<o:p></o:p></span></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'>//
capacity:</span></i><span style='font-size:12.0pt;line-height:115%'><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr auto size(const C&amp; c) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span>Returns</span></i><span
style='font-size:12.0pt;line-height:115%'>:&nbsp;c.size().<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr size_t size(const T (&amp;array)[N])
noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span>Returns</span></i><span
style='font-size:12.0pt;line-height:115%'>:&nbsp;N.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr bool empty(const C&amp; c) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span><i>Returns</i>:&nbsp;c.empty().<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr bool empty(const T (&amp;array)[N])
noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span><i>Returns</i>:&nbsp;false.<o:p></o:p></span></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'>//
element access: </span></i><span style='font-size:12.0pt;line-height:115%'><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr decltype(auto) front(C&amp; c); <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr decltype(auto) front(const C&amp; c);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span><i>Returns</i>:&nbsp;c.front().<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr decltype(auto) back(C&amp; c); <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr decltype(auto) back(const C&amp; c);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span><i>Returns</i>:&nbsp;c.back().<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr T&amp; front(T (&amp;array)[N]) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span><i>Returns</i>:&nbsp;array[0].<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr T&amp; back(T (&amp;array)[N]) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span><i>Returns</i>:&nbsp;array[N - 1].<o:p></o:p></span></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'>// data
access:</span></i><span style='font-size:12.0pt;line-height:115%'><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr auto data(C&amp; c) noexcept; <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class C&gt; constexpr auto data(const C&amp; c) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><i><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span>Returns</span></i><span
style='font-size:12.0pt;line-height:115%'>: c.data().<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>template
&lt;class T, size_t N&gt; constexpr T* data(T (&amp;array)[N]) noexcept;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'><span
style='mso-tab-count:1'> </span><i>Returns</i>: array.<o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%'>Acknowledgments <o:p></o:p></span></b></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>A big thank
you to Stephan T. Lavavej for his numerous and valuable feedback, suggestions,
and corrections for this proposal.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Credit to
Daniel Krgler&nbsp;for suggesting &quot;container access&quot; as the name of
the new sub-clause in &lt;iterator&gt;. <o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%'>References<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Stepanov,
A., &quot;Notes on Programming&quot;, p. 21. Available from: http://www.stepanovpapers.com/notes.pdf<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Microsoft
Developer Network, &quot;_countof Macro&quot;. Available from:
http://msdn.microsoft.com/en-us/library/ms175773.aspx<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:12.0pt;line-height:115%'>Maurer, J.,
N3639 &quot;<span style='mso-bidi-font-weight:bold'>Runtime-sized arrays with
automatic storage duration (revision 5)&quot;. Available from: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html</span><o:p></o:p></span></p>

</div>

</body>

</html>
