From a511007d0f160a540f8e6e70596eb458889b9491 Mon Sep 17 00:00:00 2001
From: Niels Dekker
@@ -52,6 +53,9 @@ union and class types.
Moreover, value_initialized
offers a workaround to various
compiler issues regarding value-initialization.
+Furthermore a convenience class, initialized_value
is provided,
+to avoid repeating the type name when retrieving the value from a
+value_initialized<T>
object.
value_initialized<T> var;+ +
+The convenience class initialized_value
+allows value-initializing a variable as follows:
+
+ T var = initialized_value(); ++This form of initialization is also very similar to
T4 var4 = T4()
,
+but robust against the aforementioned compiler issues.
+
get()
idiom:
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
class initialized_value
+namespace boost { +class initialized_value +{ + public : + template <class T> operator T() const ; +}; +} // namespace boost ++ +The class
initialized_value
provides a convenient way to get
+an initialized value: its conversion operator provides an appropriate
+value-initialized object for any CopyConstructible type.
+
+Suppose you need to have an initialized variable of type T
.
+You could do it as follows:
++ T var = T(); ++But as mentioned before, this form suffers from various compiler issues. +The template
value_initialized
offers a workaround:
++ T var = get( value_initialized<T>() ); ++Unfortunately both forms repeat the type name, which +is rather short now (
T
), but could of course be
+more like Namespace::Template<Arg>::Type
.
+Instead, one could use initialized_value
as follows:
++ T var = initialized_value(); +
Revised 15 January 2008
+Revised 16 January 2008
© Copyright Fernando Cacciola, 2002, 2008.
diff --git a/value_init_test.cpp b/value_init_test.cpp index 7b332d7..70cd998 100644 --- a/value_init_test.cpp +++ b/value_init_test.cpp @@ -7,7 +7,7 @@ // Test program for "boost/utility/value_init.hpp" // // 21 Agu 2002 (Created) Fernando Cacciola -// 15 Jan 2008 (Added tests regarding compiler issues) Fernando Cacciola, Niels Dekker +// 16 Jan 2008 (Added tests regarding compiler issues and initialized_value) Fernando Cacciola, Niels Dekker #include