summaryrefslogtreecommitdiff
path: root/doc/test/array2.xml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/test/array2.xml')
-rw-r--r--doc/test/array2.xml82
1 files changed, 82 insertions, 0 deletions
diff --git a/doc/test/array2.xml b/doc/test/array2.xml
new file mode 100644
index 0000000000..e2a90174c4
--- /dev/null
+++ b/doc/test/array2.xml
@@ -0,0 +1,82 @@
+<section id="array.rationale">
+ <title>Design Rationale</title>
+
+ <para>
+ There was an important design tradeoff regarding the
+ constructors: We could implement array as an "aggregate" (see
+ Section 8.5.1, [dcl.init.aggr], of the C++ Standard). This would
+ mean:
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ An array can be initialized with a
+ brace-enclosing, comma-separated list of initializers for the
+ elements of the container, written in increasing subscript
+ order:
+ </simpara>
+
+ <programlisting>
+ <classname>boost::array</classname>&lt;int,4&gt; a = { { 1, 2, 3 } };
+ </programlisting>
+
+ <simpara>
+ Note that if there are fewer elements in the
+ initializer list, then each remaining element gets
+ default-initialized (thus, it has a defined value).
+ </simpara>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ However, this approach has its drawbacks: <emphasis
+ role="bold">
+ passing no initializer list means that the elements
+ have an indetermined initial value
+ </emphasis>, because the rule says
+ that aggregates may have:
+ <itemizedlist>
+ <listitem>
+ <simpara>No user-declared constructors.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>No private or protected non-static data members.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>No base classes.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>No virtual functions.</simpara>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>Nevertheless, The current implementation uses this approach.</para>
+
+ <para>
+ Note that for standard conforming compilers it is possible to
+ use fewer braces (according to 8.5.1 (11) of the Standard). That is,
+ you can initialize an array as follows:
+ </para>
+
+ <programlisting>
+ <classname>boost::array</classname>&lt;int,4&gt; a = { 1, 2, 3 };
+ </programlisting>
+
+ <para>
+ I'd appreciate any constructive feedback. <emphasis
+ role="bold">
+ Please note: I don't have time to read all boost
+ mails. Thus, to make sure that feedback arrives to me, please send
+ me a copy of each mail regarding this class.
+ </emphasis>
+ </para>
+
+ <para>
+ The code is provided "as is" without expressed or implied
+ warranty.
+ </para>
+
+</section>
+
+