[libcxx-commits] [PATCH] D106364: [libc++] Add __copysign conditionally constexpr overloads.

Marek Kurdej via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Tue Jul 20 08:00:53 PDT 2021


curdeius added inline comments.


================
Comment at: libcxx/include/math.h:1169-1190
+inline _LIBCPP_INLINE_VISIBILITY float
+copysign(float __lcpp_x, float __lcpp_y) _NOEXCEPT {
+  return __copysign(__lcpp_x, __lcpp_y);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY long double
+copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {
----------------
If anyone has an idea about how to replace these 3 overloads with something simpler, without breaking things, I'm all ears.
Just writing:
```
template <class _A1, class _A2>
auto copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT {
    return __copysign(__lcpp_x, __lcpp_y);
}
```
doesn't work before C++14 because of `auto`.
Using `std::__promote` instead results in ambiguities.
Also, type deduction might fail if passed e.g. a float and a type implicitly convertible to float (works now, deduction of _A2 would fail without using tricks like `_A2 = identity<_A1>`, but even then I'm not sure of consequences.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D106364/new/

https://reviews.llvm.org/D106364



More information about the libcxx-commits mailing list