Index: value_init.htm =================================================================== --- value_init.htm (revision 61724) +++ value_init.htm (working copy) @@ -33,6 +33,7 @@ @@ -123,6 +124,12 @@

+The template initialized +offers both value-initialization and direct-initialization. +It is especially useful as a data member type, allowing the very same object +to be either direct-initialized or value-initialized. +

+

The const object initialized_value allows value-initializing a variable as follows:

@@ -340,6 +347,52 @@
                    
 
value_initialized<int> x ;
get(x) = 1 ; // OK

value_initialized<int const> cx ;
get(x) = 1 ; // ERROR: Cannot modify a const object

value_initialized<int> const x_c ;
get(x_c) = 1 ; // ERROR: Cannot modify a const object

value_initialized<int const> const cx_c ;
get(cx_c) = 1 ; // ERROR: Cannot modify a const object
+

template class initialized<T>

+ +
namespace boost {

template<class T>
class initialized
{ +
public : +
initialized() : x() {} +
explicit initialized(T const & arg) : x(arg) {} +
operator T const &() const; +
operator T&(); +
T const &data() const; +
T& data(); +
void swap( value_initialized<T>& ); +
+
private : +
unspecified x ; +
} ; +
+
template<class T> +
T const& get ( initialized<T> const& x ); +
+
template<class T> +
T& get ( initialized<T>& x ); +
+
} // namespace boost +
+ +The template class boost::initialized<T> supports both value-initialization +and direct-initialization, so its interface is a superset of the interface +of value_initialized<T>: Its default-constructor +value-initializes the wrapped object just like the default-constructor of +value_initialized<T>, but boost::initialized<T> +also offers an extra explicit +constructor, which direct-initializes the wrapped object by the specified value. +

+ +initialized<T> is especially useful when the wrapped +object must be either value-initialized or direct-initialized, depending on +runtime conditions. For example, initialized<T> could +hold the value of a data member that may be value-initialized by some +constructors, and direct-initialized by others. +On the other hand, if it is known beforehand that the +object must always be value-initialized, value_initialized<T> +may be preferable. And if the object must always be +direct-initialized, none of the two wrappers really needs to be used. +

+ +

initialized_value

@@ -399,6 +452,9 @@
 

value_initialized was reimplemented by Fernando Cacciola and Niels Dekker for Boost release version 1.35 (2008), offering a workaround to various compiler issues.

+

boost::initialized was very much inspired by feedback from Edward Diener and + Jeffrey Hellrung. +

initialized_value was written by Niels Dekker, and added to Boost release version 1.36 (2008).

Developed by Fernando Cacciola, @@ -407,9 +463,9 @@


-

Revised 03 October 2009

+

Revised 1 May 2010

-

© Copyright Fernando Cacciola, 2002, 2009.

+

© Copyright Fernando Cacciola, 2002 - 2010.

Distributed under the Boost Software License, Version 1.0. See www.boost.org/LICENSE_1_0.txt