# complex<long double>

**Visual Studio 2015**

Describes an object that stores an ordered pair of objects both of type **long double**, the first representing the real part of a complex number and the second representing the imaginary part.

template<> class complex<long double> { public: constexpr complex( long double _RealVal = 0, long double _ImagVal = 0 ); complex( constexpr complex<long double>& _ComplexNum ); // rest same as template class complex };

*_RealVal*The value of type

**long double**for the real part of the complex number being constructed.*_ImagVal*The value of type

**long double**for the imaginary part of the complex number being constructed.*_ComplexNum*The complex number of type

**double**or of type**float**whose real and imaginary parts are used to initialize a complex number of type**long double**being constructed.

A complex number of type **long double**.

The explicit specialization of the template class complex to a complex class of type **long double** differs from the template class only in the constructors it defines. The conversion from **long double** to **float** is allowed to be implicit, but the conversion from **double** to **long double** is required to be **explicit**. The use of **explicit** rules out the initiation with type conversion using assignment syntax.

For more information on the template class **complex**, see complex Class. For a list of members of the template class **complex**, see .

## Example

// complex_comp_ld.cpp // compile with: /EHsc #include <complex> #include <iostream> int main( ) { using namespace std; double pi = 3.14159265359; // The first constructor specifies real & imaginary parts complex <long double> c1 ( 4.0 , 5.0 ); cout << "Specifying initial real & imaginary parts,\n" << " as type float gives c1 = " << c1 << endl; // The second constructor initializes values of the real & // imaginary parts using those of complex number of type float complex <float> c2float ( 1.0 , 3.0 ); complex <long double> c2longdouble ( c2float ); cout << "Implicit conversion from type float to type long double," << "\n gives c2longdouble = " << c2longdouble << endl; // The third constructor initializes values of the real & // imaginary parts using those of a complex number // of type double complex <double> c3double ( 3.0 , 4.0 ); complex <long double> c3longdouble ( c3double ); cout << "Implicit conversion from type long double to type float," << "\n gives c3longdouble = " << c3longdouble << endl; // The modulus and argument of a complex number can be recovered double absc3 = abs ( c3longdouble ); double argc3 = arg ( c3longdouble ); cout << "The modulus of c3 is recovered from c3 using: abs ( c3 ) = " << absc3 << endl; cout << "Argument of c3 is recovered from c3 using:\n arg ( c3 ) = " << argc3 << " radians, which is " << argc3 * 180 / pi << " degrees." << endl; }

## Requirements

**Header**: <complex>

Namespace: std