@@ -1879,21 +1879,40 @@ and so on.
1879
1879
1880
1880
@subsection tutorial-containers-elements Container elements
1881
1881
1882
- In Hana, containers own their elements. When a container is created, it makes
1883
- a _copy_ of the elements used to initialize it and stores them inside the
1884
- container. Of course, unnecessary copies are avoided by using move semantics.
1885
- Because of those owning semantics, the lifetime of the objects inside the
1886
- container is the same as that of the container.
1882
+ In Hana, containers own their elements. When a container is created, it
1883
+ normally makes a _copy_ of the elements used to initialize it and stores them
1884
+ inside the container. Of course, unnecessary copies are avoided by using move
1885
+ semantics. Because of those owning semantics, the lifetime of the objects
1886
+ inside the container is the same as that of the container.
1887
1887
1888
1888
@snippet example/tutorial/containers.cpp lifetime
1889
1889
1890
- Much like containers in the standard library, containers in Hana expect their
1891
- elements to be objects. For this reason, references _may not_ be stored in
1892
- them. When references must be stored inside a container, one should use a
1893
- `std::reference_wrapper` instead:
1890
+ However, some containers allow storing references instead of actual objects.
1891
+ In that case, the owning semantics explained above do not hold anymore. For
1892
+ example, it is possible to create a `hana::tuple` holding references as
1893
+ follows:
1894
+
1895
+ @snippet example/tutorial/containers.cpp reference_tuple
1896
+
1897
+ @note
1898
+ Of course, a single tuple can also hold some elements by value and other
1899
+ elements by reference.
1900
+
1901
+ Since explicitly specifying the type of the container to achieve by-reference
1902
+ semantics can be cumbersome (and sometimes downright impossible when that
1903
+ type is implementation-defined), the `make_xxx` family of functions also
1904
+ support the use of `reference_wrapper`s:
1894
1905
1895
1906
@snippet example/tutorial/containers.cpp reference_wrapper
1896
1907
1908
+ When passed to a `hana::make_xxx` function, `std::reference_wrapper`s and
1909
+ `boost::reference_wrapper`s will cause the container to hold a reference
1910
+ instead of a `reference_wrapper`. Of course, only the `make_xxx` functions
1911
+ associated to containers that support holding references implement this
1912
+ special behavior. To know whether a container is able to hold references
1913
+ (and implements this behavior), one should consult the reference documentation
1914
+ for that container.
1915
+
1897
1916
1898
1917
1899
1918
0 commit comments