Commit 8936f531 by Jonathan Wakely Committed by Jonathan Wakely

Document LWG 2735 status and add test

This DR was already resolved for GCC 7.1 by the implementation of DR
2192, but we didn't have an explicit test for the behaviour that 2735
guarantees.

	* 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.

From-SVN: r268867
parent 31de5e4d
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
......
......@@ -1134,6 +1134,17 @@ requirements of the license of GCC.
<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&lt;const T&gt;</code> specialization is not
SFINAE compatible and breaks decomposition declarations
......
......@@ -64,6 +64,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// _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
......
// 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>();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment