Boost logo

Boost :

Subject: Re: [boost] [chrono] Interoperability with ICL and common concepts
From: Howard Hinnant (howard.hinnant_at_[hidden])
Date: 2011-03-16 09:53:25


On Mar 16, 2011, at 8:50 AM, Joachim Faulhaber wrote:

> 2011/3/15 Howard Hinnant <howard.hinnant_at_[hidden]>:
>> On Mar 15, 2011, at 2:00 PM, Vicente Botet wrote:
>>
>> The current std::chrono::duration default constructor has this definition:
>>
>> constexpr duration() = default;
>
> hmm, I'm a little confused now
>
>> The rationale for this is to give the client and the Rep author as many options as possible:
>>
>> typedef std::chrono::duration<long long> D;
>>
>> D d1; // d1.count() uninitialized - speed
>> D d2 = D(); // d2.count() zero-initialized - safety if you believe 0 is safe
>
> This behavior is exactly what I desire
>
>> typedef std::chrono::duration<BigInt> CustomD;
>>
>> CustomD d3; // d3.count() default constructed
>
> But the current implementation of Boost.Chrono does not work like that:
>
> typedef std::chrono::duration<long long> D;
> D d2 = D(); // d2.count() UNINITIALIZED
>
> Will the semantics of
>
>> constexpr duration() = default;
>
> implement the proposed behavior with the new standard?

Yes. I'm not sure if any compiler yet implements =default for default constructors. I'm hopeful that this feature will be widely implemented soon. It has the semantics of defining a compiler-generated default constructor, which you can only do in C++03 if you don't have any other constructors declared.

-Howard


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk