LWG 1522
llvm-svn: 119710
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: d518d1c807ab815735e783a5b1cd7c57b82c9056
diff --git a/include/complex b/include/complex
index fd3375b..273a807 100644
--- a/include/complex
+++ b/include/complex
@@ -191,17 +191,17 @@
template<Integral T> double norm(T);
float norm(float);
-template<class T> complex<T> conj(const complex<T>&);
- long double conj(long double);
- double conj(double);
-template<Integral T> double conj(T);
- float conj(float);
+template<class T> complex<T> conj(const complex<T>&);
+ complex<long double> conj(long double);
+ complex<double> conj(double);
+template<Integral T> complex<double> conj(T);
+ complex<float> conj(float);
-template<class T> complex<T> proj(const complex<T>&);
- long double proj(long double);
- double proj(double);
-template<Integral T> double proj(T);
- float proj(float);
+template<class T> complex<T> proj(const complex<T>&);
+ complex<long double> proj(long double);
+ complex<double> proj(double);
+template<Integral T> complex<double> proj(T);
+ complex<float> proj(float);
template<class T> complex<T> polar(const T&, const T& = 0);
@@ -980,17 +980,17 @@
}
inline _LIBCPP_INLINE_VISIBILITY
-long double
+complex<long double>
conj(long double __re)
{
- return __re;
+ return complex<long double>(__re);
}
inline _LIBCPP_INLINE_VISIBILITY
-double
+complex<double>
conj(double __re)
{
- return __re;
+ return complex<double>(__re);
}
template<class _Tp>
@@ -998,18 +998,18 @@
typename enable_if
<
is_integral<_Tp>::value,
- double
+ complex<double>
>::type
conj(_Tp __re)
{
- return __re;
+ return complex<double>(__re);
}
inline _LIBCPP_INLINE_VISIBILITY
-float
+complex<float>
conj(float __re)
{
- return __re;
+ return complex<float>(__re);
}
// proj
@@ -1026,21 +1026,21 @@
}
inline _LIBCPP_INLINE_VISIBILITY
-long double
+complex<long double>
proj(long double __re)
{
if (isinf(__re))
__re = abs(__re);
- return __re;
+ return complex<long double>(__re);
}
inline _LIBCPP_INLINE_VISIBILITY
-double
+complex<double>
proj(double __re)
{
if (isinf(__re))
__re = abs(__re);
- return __re;
+ return complex<double>(__re);
}
template<class _Tp>
@@ -1048,20 +1048,20 @@
typename enable_if
<
is_integral<_Tp>::value,
- double
+ complex<double>
>::type
proj(_Tp __re)
{
- return __re;
+ return complex<double>(__re);
}
inline _LIBCPP_INLINE_VISIBILITY
-float
+complex<float>
proj(float __re)
{
if (isinf(__re))
__re = abs(__re);
- return __re;
+ return complex<float>(__re);
}
// polar
diff --git a/include/random b/include/random
index 3dbf808..c40baa9 100644
--- a/include/random
+++ b/include/random
@@ -1498,7 +1498,7 @@
UnaryOperation fw);
vector<result_type> intervals() const;
- vector<double> densities() const;
+ vector<result_type> densities() const;
friend bool operator==(const param_type& x, const param_type& y);
friend bool operator!=(const param_type& x, const param_type& y);
@@ -1525,7 +1525,7 @@
// property functions
vector<result_type> intervals() const;
- vector<double> densities() const;
+ vector<result_type> densities() const;
param_type param() const;
void param(const param_type& parm);
@@ -1573,7 +1573,7 @@
UnaryOperation fw);
vector<result_type> intervals() const;
- vector<double> densities() const;
+ vector<result_type> densities() const;
friend bool operator==(const param_type& x, const param_type& y);
friend bool operator!=(const param_type& x, const param_type& y);
@@ -1603,7 +1603,7 @@
// property functions
vector<result_type> intervals() const;
- vector<double> densities() const;
+ vector<result_type> densities() const;
param_type param() const;
void param(const param_type& parm);
diff --git a/test/numerics/complex.number/cmplx.over/conj.pass.cpp b/test/numerics/complex.number/cmplx.over/conj.pass.cpp
index 26735a1..6adbf21 100644
--- a/test/numerics/complex.number/cmplx.over/conj.pass.cpp
+++ b/test/numerics/complex.number/cmplx.over/conj.pass.cpp
@@ -9,11 +9,11 @@
// <complex>
-// template<class T> complex<T> conj(const complex<T>&);
-// long double conj(long double);
-// double conj(double);
-// template<Integral T> double conj(T);
-// float conj(float);
+// template<class T> complex<T> conj(const complex<T>&);
+// complex<long double> conj(long double);
+// complex<double> conj(double);
+// template<Integral T> complex<double> conj(T);
+// complex<float> conj(float);
#include <complex>
#include <type_traits>
@@ -25,7 +25,7 @@
void
test(T x, typename std::enable_if<std::is_integral<T>::value>::type* = 0)
{
- static_assert((std::is_same<decltype(std::conj(x)), double>::value), "");
+ static_assert((std::is_same<decltype(std::conj(x)), std::complex<double> >::value), "");
assert(std::conj(x) == conj(std::complex<double>(x, 0)));
}
@@ -33,7 +33,7 @@
void
test(T x, typename std::enable_if<std::is_floating_point<T>::value>::type* = 0)
{
- static_assert((std::is_same<decltype(std::conj(x)), T>::value), "");
+ static_assert((std::is_same<decltype(std::conj(x)), std::complex<T> >::value), "");
assert(std::conj(x) == conj(std::complex<T>(x, 0)));
}
diff --git a/test/numerics/complex.number/cmplx.over/proj.pass.cpp b/test/numerics/complex.number/cmplx.over/proj.pass.cpp
index 6a5cff5..60d6e72 100644
--- a/test/numerics/complex.number/cmplx.over/proj.pass.cpp
+++ b/test/numerics/complex.number/cmplx.over/proj.pass.cpp
@@ -9,11 +9,11 @@
// <complex>
-// template<class T> complex<T> proj(const complex<T>&);
-// long double proj(long double);
-// double proj(double);
-// template<Integral T> double proj(T);
-// float proj(float);
+// template<class T> complex<T> proj(const complex<T>&);
+// complex<long double> proj(long double);
+// complex<double> proj(double);
+// template<Integral T> complex<double> proj(T);
+// complex<float> proj(float);
#include <complex>
#include <type_traits>
@@ -25,7 +25,7 @@
void
test(T x, typename std::enable_if<std::is_integral<T>::value>::type* = 0)
{
- static_assert((std::is_same<decltype(std::proj(x)), double>::value), "");
+ static_assert((std::is_same<decltype(std::proj(x)), std::complex<double> >::value), "");
assert(std::proj(x) == proj(std::complex<double>(x, 0)));
}
@@ -33,7 +33,7 @@
void
test(T x, typename std::enable_if<std::is_floating_point<T>::value>::type* = 0)
{
- static_assert((std::is_same<decltype(std::proj(x)), T>::value), "");
+ static_assert((std::is_same<decltype(std::proj(x)), std::complex<T> >::value), "");
assert(std::proj(x) == proj(std::complex<T>(x, 0)));
}