summaryrefslogtreecommitdiffstats
path: root/libcxx
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2012-07-20 22:18:27 +0000
committerHoward Hinnant <hhinnant@apple.com>2012-07-20 22:18:27 +0000
commitf4e11de8e8495aa4e4ea649a9a2ed7c48dede7da (patch)
treeca270168d14ddf86a748fb6d87008fa90439d71c /libcxx
parentf473cd4b6a48ef22e0f3d6ed91f471a41b34b01d (diff)
downloadbcm5719-llvm-f4e11de8e8495aa4e4ea649a9a2ed7c48dede7da.tar.gz
bcm5719-llvm-f4e11de8e8495aa4e4ea649a9a2ed7c48dede7da.zip
constexpr applied to <complex>.
llvm-svn: 160585
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/include/complex42
-rw-r--r--libcxx/test/numerics/complex.number/complex.members/construct.pass.cpp24
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/double_float_explicit.pass.cpp10
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/double_float_implicit.pass.cpp10
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/double_long_double_explicit.pass.cpp10
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/float_double_explicit.pass.cpp10
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/float_long_double_explicit.pass.cpp10
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/long_double_double_explicit.pass.cpp10
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/long_double_double_implicit.pass.cpp10
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/long_double_float_explicit.pass.cpp10
-rw-r--r--libcxx/test/numerics/complex.number/complex.special/long_double_float_implicit.pass.cpp10
11 files changed, 134 insertions, 22 deletions
diff --git a/libcxx/include/complex b/libcxx/include/complex
index 3b660a35a9a..54dbc25880e 100644
--- a/libcxx/include/complex
+++ b/libcxx/include/complex
@@ -330,13 +330,13 @@ class _LIBCPP_VISIBLE complex<float>
public:
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) {}
- explicit /*constexpr*/ complex(const complex<double>& __c);
- explicit /*constexpr*/ complex(const complex<long double>& __c);
+ explicit _LIBCPP_CONSTEXPR complex(const complex<double>& __c);
+ explicit _LIBCPP_CONSTEXPR complex(const complex<long double>& __c);
- /*constexpr*/ _LIBCPP_INLINE_VISIBILITY float real() const {return __re_;}
- /*constexpr*/ _LIBCPP_INLINE_VISIBILITY float imag() const {return __im_;}
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR float real() const {return __re_;}
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR float imag() const {return __im_;}
_LIBCPP_INLINE_VISIBILITY void real(value_type __re) {__re_ = __re;}
_LIBCPP_INLINE_VISIBILITY void imag(value_type __im) {__im_ = __im;}
@@ -386,13 +386,13 @@ class _LIBCPP_VISIBLE complex<double>
public:
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) {}
- /*constexpr*/ complex(const complex<float>& __c);
- explicit /*constexpr*/ complex(const complex<long double>& __c);
+ _LIBCPP_CONSTEXPR complex(const complex<float>& __c);
+ explicit _LIBCPP_CONSTEXPR complex(const complex<long double>& __c);
- /*constexpr*/ _LIBCPP_INLINE_VISIBILITY double real() const {return __re_;}
- /*constexpr*/ _LIBCPP_INLINE_VISIBILITY double imag() const {return __im_;}
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR double real() const {return __re_;}
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR double imag() const {return __im_;}
_LIBCPP_INLINE_VISIBILITY void real(value_type __re) {__re_ = __re;}
_LIBCPP_INLINE_VISIBILITY void imag(value_type __im) {__im_ = __im;}
@@ -442,13 +442,13 @@ class _LIBCPP_VISIBLE complex<long double>
public:
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) {}
- /*constexpr*/ complex(const complex<float>& __c);
- /*constexpr*/ complex(const complex<double>& __c);
+ _LIBCPP_CONSTEXPR complex(const complex<float>& __c);
+ _LIBCPP_CONSTEXPR complex(const complex<double>& __c);
- /*constexpr*/ _LIBCPP_INLINE_VISIBILITY long double real() const {return __re_;}
- /*constexpr*/ _LIBCPP_INLINE_VISIBILITY long double imag() const {return __im_;}
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR long double real() const {return __re_;}
+ _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 imag(value_type __im) {__im_ = __im;}
@@ -490,33 +490,33 @@ public:
}
};
-//constexpr
inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_CONSTEXPR
complex<float>::complex(const complex<double>& __c)
: __re_(__c.real()), __im_(__c.imag()) {}
-//constexpr
inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_CONSTEXPR
complex<float>::complex(const complex<long double>& __c)
: __re_(__c.real()), __im_(__c.imag()) {}
-//constexpr
inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_CONSTEXPR
complex<double>::complex(const complex<float>& __c)
: __re_(__c.real()), __im_(__c.imag()) {}
-//constexpr
inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_CONSTEXPR
complex<double>::complex(const complex<long double>& __c)
: __re_(__c.real()), __im_(__c.imag()) {}
-//constexpr
inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_CONSTEXPR
complex<long double>::complex(const complex<float>& __c)
: __re_(__c.real()), __im_(__c.imag()) {}
-//constexpr
inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_CONSTEXPR
complex<long double>::complex(const complex<double>& __c)
: __re_(__c.real()), __im_(__c.imag()) {}
diff --git a/libcxx/test/numerics/complex.number/complex.members/construct.pass.cpp b/libcxx/test/numerics/complex.number/complex.members/construct.pass.cpp
index 23374c5e961..b4d870fad11 100644
--- a/libcxx/test/numerics/complex.number/complex.members/construct.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.members/construct.pass.cpp
@@ -9,7 +9,7 @@
// <complex>
-// complex(const T& re = T(), const T& im = T());
+// constexpr complex(const T& re = T(), const T& im = T());
#include <complex>
#include <cassert>
@@ -38,6 +38,28 @@ test()
assert(c.real() == 10.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()
diff --git a/libcxx/test/numerics/complex.number/complex.special/double_float_explicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/double_float_explicit.pass.cpp
index 038e17107bf..e8d07ce287d 100644
--- a/libcxx/test/numerics/complex.number/complex.special/double_float_explicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/double_float_explicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<float> cd(2.5, 3.5);
std::complex<double> cf(cd);
assert(cf.real() == cd.real());
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
}
diff --git a/libcxx/test/numerics/complex.number/complex.special/double_float_implicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/double_float_implicit.pass.cpp
index 197c6ceb5e6..298aaa3a7a8 100644
--- a/libcxx/test/numerics/complex.number/complex.special/double_float_implicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/double_float_implicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<float> cd(2.5, 3.5);
std::complex<double> cf = cd;
assert(cf.real() == cd.real());
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
}
diff --git a/libcxx/test/numerics/complex.number/complex.special/double_long_double_explicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/double_long_double_explicit.pass.cpp
index 79c709e926f..6ff74a2cdef 100644
--- a/libcxx/test/numerics/complex.number/complex.special/double_long_double_explicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/double_long_double_explicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<long double> cd(2.5, 3.5);
std::complex<double> cf(cd);
assert(cf.real() == cd.real());
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
}
diff --git a/libcxx/test/numerics/complex.number/complex.special/float_double_explicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/float_double_explicit.pass.cpp
index 01002b35e16..77ca9d7f2aa 100644
--- a/libcxx/test/numerics/complex.number/complex.special/float_double_explicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/float_double_explicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<double> cd(2.5, 3.5);
std::complex<float> cf(cd);
assert(cf.real() == cd.real());
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
}
diff --git a/libcxx/test/numerics/complex.number/complex.special/float_long_double_explicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/float_long_double_explicit.pass.cpp
index 9203fd5aeae..4fb11b4ca27 100644
--- a/libcxx/test/numerics/complex.number/complex.special/float_long_double_explicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/float_long_double_explicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<long double> cd(2.5, 3.5);
std::complex<float> cf(cd);
assert(cf.real() == cd.real());
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
}
diff --git a/libcxx/test/numerics/complex.number/complex.special/long_double_double_explicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/long_double_double_explicit.pass.cpp
index b604fd4b8c6..dd10c808b90 100644
--- a/libcxx/test/numerics/complex.number/complex.special/long_double_double_explicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/long_double_double_explicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<double> cd(2.5, 3.5);
std::complex<long double> cf(cd);
assert(cf.real() == cd.real());
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
}
diff --git a/libcxx/test/numerics/complex.number/complex.special/long_double_double_implicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/long_double_double_implicit.pass.cpp
index 14eff25e7b4..aab539407d0 100644
--- a/libcxx/test/numerics/complex.number/complex.special/long_double_double_implicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/long_double_double_implicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<double> cd(2.5, 3.5);
std::complex<long double> cf = cd;
assert(cf.real() == cd.real());
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
}
diff --git a/libcxx/test/numerics/complex.number/complex.special/long_double_float_explicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/long_double_float_explicit.pass.cpp
index 5414f348af1..a5f5101c4dc 100644
--- a/libcxx/test/numerics/complex.number/complex.special/long_double_float_explicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/long_double_float_explicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<float> cd(2.5, 3.5);
std::complex<long double> cf(cd);
assert(cf.real() == cd.real());
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
}
diff --git a/libcxx/test/numerics/complex.number/complex.special/long_double_float_implicit.pass.cpp b/libcxx/test/numerics/complex.number/complex.special/long_double_float_implicit.pass.cpp
index a0021782fe2..25b93823f6e 100644
--- a/libcxx/test/numerics/complex.number/complex.special/long_double_float_implicit.pass.cpp
+++ b/libcxx/test/numerics/complex.number/complex.special/long_double_float_implicit.pass.cpp
@@ -20,8 +20,18 @@
int main()
{
+ {
const std::complex<float> cd(2.5, 3.5);
std::complex<long double> cf = cd;
assert(cf.real() == cd.real());
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
}
OpenPOWER on IntegriCloud