+2019-02-14 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/xml/manual/intro.xml: Document LWG 2735 status.
+ * include/bits/std_abs.h: Add comment about LWG 2735.
+ * testsuite/26_numerics/headers/cstdlib/dr2735.cc: New test.
+
2019-02-13 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/89345
<listitem><para>Define the <code>value_compare</code> typedef.
</para></listitem></varlistentry>
+ <varlistentry xml:id="manual.bugs.dr2735"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2735">2735</link>:
+ <emphasis><code>std::abs(short)</code>,
+ <code>std::abs(signed char)</code> and others should return
+ <code>int</code> instead of <code>double</code> in order to be
+ compatible with C++98 and C
+ </emphasis>
+ </term>
+ <listitem><para>Resolved by the changes for
+ <link linkend="manual.bugs.dr2192">2192</link>.
+ </para></listitem></varlistentry>
+
<varlistentry xml:id="manual.bugs.dr2770"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2770">2770</link>:
<emphasis><code>tuple_size<const T></code> specialization is not
SFINAE compatible and breaks decomposition declarations
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 2192. Validity and return type of std::abs(0u) is unclear
// 2294. <cstdlib> should declare abs(double)
+// 2735. std::abs(short), std::abs(signed char) and others should return int
#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
inline _GLIBCXX_CONSTEXPR double
--- /dev/null
+// Copyright (C) 2019 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile }
+
+// NB: Don't include any other headers in this file.
+// LWG 2735. std::abs(short), std::abs(signed char) and others should return
+// int instead of double in order to be compatible with C++98 and C
+#include <cstdlib>
+
+template<typename> struct is_int { };
+template<> struct is_int<int> { typedef int type; };
+
+template<typename T>
+typename is_int<T>::type
+do_check(T t)
+{
+ return T(0);
+}
+
+template<typename T>
+void check()
+{
+ do_check(std::abs(T(0)));
+}
+
+void test()
+{
+ check<short>();
+ check<unsigned short>();
+ check<char>();
+ check<signed char>();
+ check<unsigned char>();
+}