Boost logo

Boost :

Subject: Re: [boost] [utility/value_init] boost::value_initialized<T> direct-initialized?
From: Niels Dekker - address until 2010-10-10 (niels_address_until_2010-10-10_at_[hidden])
Date: 2010-04-01 03:31:32

Jeffrey Hellrung wrote:
>> The templated constructor should be explicit, because otherwise
>> things like
>> boost::initialized<std::vector<int> > v = 10;
>> would compile. IMHO, it's okay if implicit
>> conversions that would normally work for
>> the contained type don't work, since this errs
>> on the side of safety, but it isn't okay to make
>> all conversions implicit.
> Agreed.

Leaving out the "explicit" keyword from the initialized(const T&)
constructor of initialized<T> won't make Steven's example compile (as I
wrote before).

In what particular situation would you need to use
boost::initialized<T>, including the new initialized(const T&)
constructor, instead of just the old value_initialized<T>?

I think /the/ motivating use case for boost::initialized<T> is about
member data initialization:

   template <typename T> class foo
     std::string m_name;
     boost::initialized<T> m_data;
     foo(const foo&);
     foo(const T&, std::string);

In this case, some of foo's constructors may want m_data to be
value-initialized, but others need to do direct-initialization.

Do you agree that its support for member data initialization would be
the main reason for having boost::initialized<T>?

> And I don't think the boost::direct_initialized tag is
> necessary,
> MSVC compiler bugs be damned.

Sorry, I'm not sure what you mean. It's certainly important to me to
have something that works on MSVC.

Kind regards,


Niels Dekker
Scientific programmer at LKEB, Leiden University Medical Center

Boost list run by bdawes at, gregod at, cpdaniel at, john at