$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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