constexpr applied to <complex>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160585 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c83960a9e4
commit
410f2def47
@ -330,13 +330,13 @@ class _LIBCPP_VISIBLE complex<float>
|
|||||||
public:
|
public:
|
||||||
typedef float value_type;
|
typedef float value_type;
|
||||||
|
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY complex(float __re = 0.0f, float __im = 0.0f)
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR complex(float __re = 0.0f, float __im = 0.0f)
|
||||||
: __re_(__re), __im_(__im) {}
|
: __re_(__re), __im_(__im) {}
|
||||||
explicit /*constexpr*/ complex(const complex<double>& __c);
|
explicit _LIBCPP_CONSTEXPR complex(const complex<double>& __c);
|
||||||
explicit /*constexpr*/ complex(const complex<long double>& __c);
|
explicit _LIBCPP_CONSTEXPR complex(const complex<long double>& __c);
|
||||||
|
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY float real() const {return __re_;}
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR float real() const {return __re_;}
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY float imag() const {return __im_;}
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR float imag() const {return __im_;}
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY void real(value_type __re) {__re_ = __re;}
|
_LIBCPP_INLINE_VISIBILITY void real(value_type __re) {__re_ = __re;}
|
||||||
_LIBCPP_INLINE_VISIBILITY void imag(value_type __im) {__im_ = __im;}
|
_LIBCPP_INLINE_VISIBILITY void imag(value_type __im) {__im_ = __im;}
|
||||||
@ -386,13 +386,13 @@ class _LIBCPP_VISIBLE complex<double>
|
|||||||
public:
|
public:
|
||||||
typedef double value_type;
|
typedef double value_type;
|
||||||
|
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY complex(double __re = 0.0, double __im = 0.0)
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR complex(double __re = 0.0, double __im = 0.0)
|
||||||
: __re_(__re), __im_(__im) {}
|
: __re_(__re), __im_(__im) {}
|
||||||
/*constexpr*/ complex(const complex<float>& __c);
|
_LIBCPP_CONSTEXPR complex(const complex<float>& __c);
|
||||||
explicit /*constexpr*/ complex(const complex<long double>& __c);
|
explicit _LIBCPP_CONSTEXPR complex(const complex<long double>& __c);
|
||||||
|
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY double real() const {return __re_;}
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR double real() const {return __re_;}
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY double imag() const {return __im_;}
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR double imag() const {return __im_;}
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY void real(value_type __re) {__re_ = __re;}
|
_LIBCPP_INLINE_VISIBILITY void real(value_type __re) {__re_ = __re;}
|
||||||
_LIBCPP_INLINE_VISIBILITY void imag(value_type __im) {__im_ = __im;}
|
_LIBCPP_INLINE_VISIBILITY void imag(value_type __im) {__im_ = __im;}
|
||||||
@ -442,13 +442,13 @@ class _LIBCPP_VISIBLE complex<long double>
|
|||||||
public:
|
public:
|
||||||
typedef long double value_type;
|
typedef long double value_type;
|
||||||
|
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY complex(long double __re = 0.0L, long double __im = 0.0L)
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR complex(long double __re = 0.0L, long double __im = 0.0L)
|
||||||
: __re_(__re), __im_(__im) {}
|
: __re_(__re), __im_(__im) {}
|
||||||
/*constexpr*/ complex(const complex<float>& __c);
|
_LIBCPP_CONSTEXPR complex(const complex<float>& __c);
|
||||||
/*constexpr*/ complex(const complex<double>& __c);
|
_LIBCPP_CONSTEXPR complex(const complex<double>& __c);
|
||||||
|
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY long double real() const {return __re_;}
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR long double real() const {return __re_;}
|
||||||
/*constexpr*/ _LIBCPP_INLINE_VISIBILITY long double imag() const {return __im_;}
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR long double imag() const {return __im_;}
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY void real(value_type __re) {__re_ = __re;}
|
_LIBCPP_INLINE_VISIBILITY void real(value_type __re) {__re_ = __re;}
|
||||||
_LIBCPP_INLINE_VISIBILITY void imag(value_type __im) {__im_ = __im;}
|
_LIBCPP_INLINE_VISIBILITY void imag(value_type __im) {__im_ = __im;}
|
||||||
@ -490,33 +490,33 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//constexpr
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
_LIBCPP_CONSTEXPR
|
||||||
complex<float>::complex(const complex<double>& __c)
|
complex<float>::complex(const complex<double>& __c)
|
||||||
: __re_(__c.real()), __im_(__c.imag()) {}
|
: __re_(__c.real()), __im_(__c.imag()) {}
|
||||||
|
|
||||||
//constexpr
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
_LIBCPP_CONSTEXPR
|
||||||
complex<float>::complex(const complex<long double>& __c)
|
complex<float>::complex(const complex<long double>& __c)
|
||||||
: __re_(__c.real()), __im_(__c.imag()) {}
|
: __re_(__c.real()), __im_(__c.imag()) {}
|
||||||
|
|
||||||
//constexpr
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
_LIBCPP_CONSTEXPR
|
||||||
complex<double>::complex(const complex<float>& __c)
|
complex<double>::complex(const complex<float>& __c)
|
||||||
: __re_(__c.real()), __im_(__c.imag()) {}
|
: __re_(__c.real()), __im_(__c.imag()) {}
|
||||||
|
|
||||||
//constexpr
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
_LIBCPP_CONSTEXPR
|
||||||
complex<double>::complex(const complex<long double>& __c)
|
complex<double>::complex(const complex<long double>& __c)
|
||||||
: __re_(__c.real()), __im_(__c.imag()) {}
|
: __re_(__c.real()), __im_(__c.imag()) {}
|
||||||
|
|
||||||
//constexpr
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
_LIBCPP_CONSTEXPR
|
||||||
complex<long double>::complex(const complex<float>& __c)
|
complex<long double>::complex(const complex<float>& __c)
|
||||||
: __re_(__c.real()), __im_(__c.imag()) {}
|
: __re_(__c.real()), __im_(__c.imag()) {}
|
||||||
|
|
||||||
//constexpr
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
_LIBCPP_CONSTEXPR
|
||||||
complex<long double>::complex(const complex<double>& __c)
|
complex<long double>::complex(const complex<double>& __c)
|
||||||
: __re_(__c.real()), __im_(__c.imag()) {}
|
: __re_(__c.real()), __im_(__c.imag()) {}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
// <complex>
|
// <complex>
|
||||||
|
|
||||||
// complex(const T& re = T(), const T& im = T());
|
// constexpr complex(const T& re = T(), const T& im = T());
|
||||||
|
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@ -38,6 +38,28 @@ test()
|
|||||||
assert(c.real() == 10.5);
|
assert(c.real() == 10.5);
|
||||||
assert(c.imag() == -9.5);
|
assert(c.imag() == -9.5);
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<T> c;
|
||||||
|
static_assert(c.real() == 0, "");
|
||||||
|
static_assert(c.imag() == 0, "");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
constexpr std::complex<T> c = 7.5;
|
||||||
|
static_assert(c.real() == 7.5, "");
|
||||||
|
static_assert(c.imag() == 0, "");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
constexpr std::complex<T> c(8.5);
|
||||||
|
static_assert(c.real() == 8.5, "");
|
||||||
|
static_assert(c.imag() == 0, "");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
constexpr std::complex<T> c(10.5, -9.5);
|
||||||
|
static_assert(c.real() == 10.5, "");
|
||||||
|
static_assert(c.imag() == -9.5, "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<float> cd(2.5, 3.5);
|
const std::complex<float> cd(2.5, 3.5);
|
||||||
std::complex<double> cf(cd);
|
std::complex<double> cf(cd);
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<float> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<double> cf(cd);
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<float> cd(2.5, 3.5);
|
const std::complex<float> cd(2.5, 3.5);
|
||||||
std::complex<double> cf = cd;
|
std::complex<double> cf = cd;
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<float> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<double> cf = cd;
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<long double> cd(2.5, 3.5);
|
const std::complex<long double> cd(2.5, 3.5);
|
||||||
std::complex<double> cf(cd);
|
std::complex<double> cf(cd);
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<long double> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<double> cf(cd);
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<double> cd(2.5, 3.5);
|
const std::complex<double> cd(2.5, 3.5);
|
||||||
std::complex<float> cf(cd);
|
std::complex<float> cf(cd);
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<double> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<float> cf(cd);
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<long double> cd(2.5, 3.5);
|
const std::complex<long double> cd(2.5, 3.5);
|
||||||
std::complex<float> cf(cd);
|
std::complex<float> cf(cd);
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<long double> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<float> cf(cd);
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<double> cd(2.5, 3.5);
|
const std::complex<double> cd(2.5, 3.5);
|
||||||
std::complex<long double> cf(cd);
|
std::complex<long double> cf(cd);
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<double> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<long double> cf(cd);
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<double> cd(2.5, 3.5);
|
const std::complex<double> cd(2.5, 3.5);
|
||||||
std::complex<long double> cf = cd;
|
std::complex<long double> cf = cd;
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<double> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<long double> cf = cd;
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<float> cd(2.5, 3.5);
|
const std::complex<float> cd(2.5, 3.5);
|
||||||
std::complex<long double> cf(cd);
|
std::complex<long double> cf(cd);
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<float> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<long double> cf(cd);
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -19,9 +19,19 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
{
|
||||||
{
|
{
|
||||||
const std::complex<float> cd(2.5, 3.5);
|
const std::complex<float> cd(2.5, 3.5);
|
||||||
std::complex<long double> cf = cd;
|
std::complex<long double> cf = cd;
|
||||||
assert(cf.real() == cd.real());
|
assert(cf.real() == cd.real());
|
||||||
assert(cf.imag() == cd.imag());
|
assert(cf.imag() == cd.imag());
|
||||||
}
|
}
|
||||||
|
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
|
{
|
||||||
|
constexpr std::complex<float> cd(2.5, 3.5);
|
||||||
|
constexpr std::complex<long double> cf = cd;
|
||||||
|
static_assert(cf.real() == cd.real(), "");
|
||||||
|
static_assert(cf.imag() == cd.imag(), "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user