@@ -1879,21 +1879,40 @@ and so on.
18791879
18801880@subsection tutorial-containers-elements Container elements
18811881
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.
18871887
18881888@snippet example/tutorial/containers.cpp lifetime
18891889
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:
18941905
18951906@snippet example/tutorial/containers.cpp reference_wrapper
18961907
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+
18971916
18981917
18991918
0 commit comments