Boost logo

Boost :

Subject: Re: [boost] [complex] Feedback and Potential Review Manager
From: Christopher Kormanyos (e_float_at_[hidden])
Date: 2012-05-07 16:35:16


<snip> >> but rather the default ctor of the template type. >> complex(const T&  re = T(), const T&  im = T()); > Do I understand correctly that the default constructor > does not set real and imag parts to zero? <snip> Well, it's appears to be more subtle than we might want it to be. ISO/IEC 14882:2011 specifies the T() form for the generalized complex template. The language specification goes on, however, to specify that only float, double and long double are valid template parameters for complex. And the subsequent template specializations for the built-in floating-point numbers have default values of 0.0F, 0.0, 0.0L. For example, as in my other post, the specified constructor for float is: complex(float  re = 0.0F, float  im = 0.0F); I also believe that the value of, say, the default constructor of float is zero. In particular void do_something() {   // F1 is initialized to zero.   float f1 = float();   ... } So ISO/IEC 14882:2011 ensures that all valid uses of complex are default initialized to zero. Without judgement, this is the spec. What a potential Boost.Complex should do for user-defined types that may potentially default construct to non-zero is an open issue. Best regards, Chris.


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