
Niels Dekker - mail address until 2008-12-31 wrote:
Edward Diener wrote:
I have a class template, templated on type T, which I need to hold as a data value in the class. I use value_initialized for this type T effectively, and the value gets value initialized correctly when the default constructor of my class is used.
If, however, I add a second constructor to my class which takes a T, for initializing my 'value_initialized<T> data' value, things do not work as well. Obviously I can still value initialize my data value, as in my default constructor, and then use 'boost::get(data) = arg;' to set the value of my value initialized variable. But this will not work if the type T is a top-level const, whereas I do want to initialize the data value in this case to the T arg passed into my second constructor.
Never mind, the question was due to my unclear thinking about the problem.
So... how did you solve the problem?
I solved it in my template by having the data value for T be of type T
when T is top-level const, otherwise it is boost::value_initialized<T>
when T is not a top-level const. The mpl::if_ metafunction and
boost::is_const were used to generate the correct type, ala
mpl::if_