DR 660, [Ready] in Toronto.

2007-08-02  Paolo Carlini  <pcarlini@suse.de>

	DR 660, [Ready] in Toronto.
	* include/bits/stl_function.h (bit_and, bit_or, bit_xor): Add.
	* testsuite/20_util/function_objects/dr660.cc: New.
	* docs/html/ext/howto.html: Add an entry for DR 660, update.

	* docs/html/ext/lwg-closed.html, docs/html/ext/lwg-active.html,
	docs/html/ext/lwg-defects.html: Import Revision 49.

From-SVN: r127166
This commit is contained in:
Paolo Carlini 2007-08-02 17:39:51 +00:00 committed by Paolo Carlini
parent f29d2cff88
commit 2ee0c1fb57
7 changed files with 20479 additions and 4926 deletions

View File

@ -1,3 +1,13 @@
2007-08-02 Paolo Carlini <pcarlini@suse.de>
DR 660, [Ready] in Toronto.
* include/bits/stl_function.h (bit_and, bit_or, bit_xor): Add.
* testsuite/20_util/function_objects/dr660.cc: New.
* docs/html/ext/howto.html: Add an entry for DR 660, update.
* docs/html/ext/lwg-closed.html, docs/html/ext/lwg-active.html,
docs/html/ext/lwg-defects.html: Import Revision 49.
2007-07-30 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/32908

View File

@ -592,7 +592,7 @@
<dd>Construct a <code>linear_congruential</code> engine and seed with it.
</dd>
<dt><a href="lwg-active.html#526">526</a>:
<dt><a href="lwg-closed.html#526">526</a>:
<em>Is it undefined if a function in the standard changes in
parameters?</em>
</dt>
@ -613,17 +613,23 @@
<dd>Add an auto_ptr&lt;void&gt; specialization.
</dd>
<dt><a href="lwg-active.html#543">543</a>:
<dt><a href="lwg-defects.html#543">543</a>:
<em>valarray slice default constructor</em>
</dt>
<dd>Follow the straightforward proposed resolution.
</dd>
<dt><a href="lwg-active.html#586">586</a>:
<dt><a href="lwg-defects.html#586">586</a>:
<em>string inserter not a formatted function</em>
</dt>
<dd>Change it to be a formatted output function (i.e. catch exceptions).
</dd>
<dt><a href="lwg-active.html#660">660</a>:
<em>Missing bitwise operations</em>
</dt>
<dd>Add the missing operations.
</dd>
<!--
<dt><a href="lwg-defects.html#"></a>:
<em></em>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -281,6 +281,32 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
};
/** @} */
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 660. Missing Bitwise Operations.
template <class _Tp>
struct bit_and : public binary_function<_Tp, _Tp, _Tp>
{
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x & __y; }
};
template <class _Tp>
struct bit_or : public binary_function<_Tp, _Tp, _Tp>
{
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x | __y; }
};
template <class _Tp>
struct bit_xor : public binary_function<_Tp, _Tp, _Tp>
{
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x ^ __y; }
};
// 20.3.5 negators
/** @defgroup s20_3_5_negators Negators
* The functions @c not1 and @c not2 each take a predicate functor

View File

@ -0,0 +1,42 @@
// 2007-08-02 Paolo Carlini <pcarlini@suse.de>
// Copyright (C) 2007 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 2, 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 COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
#include <functional>
#include <testsuite_hooks.cc>
// DR 660. Missing Bitwise Operations.
void test01()
{
bool test __attribute__((unused)) = true;
for (int i1 = 0; i1 < 1000; ++i1)
for (int i2 = 0; i2 < 1000; ++i2)
{
VERIFY( std::bit_and<int>()(i1, i2) == (i1 & i2) );
VERIFY( std::bit_or<int>()(i1, i2) == (i1 | i2) );
VERIFY( std::bit_xor<int>()(i1, i2) == (i1 ^ i2) );
}
}
int main()
{
test01();
return 0;
}