Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
0179f2c6
Commit
0179f2c6
authored
Feb 24, 2005
by
Douglas Gregor
Committed by
Doug Gregor
Feb 24, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
TR1 mem_fn and function support
From-SVN: r95486
parent
8005da99
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
984 additions
and
7 deletions
+984
-7
libstdc++-v3/ChangeLog
+28
-0
libstdc++-v3/include/Makefile.am
+1
-0
libstdc++-v3/include/Makefile.in
+1
-0
libstdc++-v3/include/tr1/functional
+0
-0
libstdc++-v3/include/tr1/functional_iterate.h
+0
-0
libstdc++-v3/testsuite/testsuite_tr1.h
+68
-7
libstdc++-v3/testsuite/tr1/3_function_objects/function/1.cc
+95
-0
libstdc++-v3/testsuite/tr1/3_function_objects/function/2.cc
+78
-0
libstdc++-v3/testsuite/tr1/3_function_objects/function/3.cc
+78
-0
libstdc++-v3/testsuite/tr1/3_function_objects/function/4.cc
+82
-0
libstdc++-v3/testsuite/tr1/3_function_objects/function/5.cc
+107
-0
libstdc++-v3/testsuite/tr1/3_function_objects/function/6.cc
+83
-0
libstdc++-v3/testsuite/tr1/3_function_objects/function/7.cc
+82
-0
libstdc++-v3/testsuite/tr1/3_function_objects/function/8.cc
+148
-0
libstdc++-v3/testsuite/tr1/3_function_objects/function/9.cc
+55
-0
libstdc++-v3/testsuite/tr1/3_function_objects/mem_fn.cc
+78
-0
No files found.
libstdc++-v3/ChangeLog
View file @
0179f2c6
2005-02-23 Douglas Gregor <doug.gregor@gmail.com>
* include/tr1/functional (function): New class template.
(mem_fn): New function template.
Implementations of TR1 function and mem_fn facilities.
* include/tr1/functional_iterate.h: Implementations of TR1
function and mem_fn facilities.
* testsuite/tr1/3_function_objects/function/1.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/function/2.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/function/3.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/function/4.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/function/5.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/function/6.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/function/7.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/function/8.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/function/9.cc: New
test of std::tr1::function.
* testsuite/tr1/3_function_objects/mem_fn.cc: New test of
std::tr1::mem_fn.
2005-02-23 Paolo Carlini <pcarlini@suse.de>
2005-02-23 Paolo Carlini <pcarlini@suse.de>
* include/tr1/type_traits: Implement is_convertible.
* include/tr1/type_traits: Implement is_convertible.
...
...
libstdc++-v3/include/Makefile.am
View file @
0179f2c6
...
@@ -229,6 +229,7 @@ tr1_builddir = ./tr1
...
@@ -229,6 +229,7 @@ tr1_builddir = ./tr1
tr1_headers
=
\
tr1_headers
=
\
${
tr1_srcdir
}
/array
\
${
tr1_srcdir
}
/array
\
${
tr1_srcdir
}
/functional
\
${
tr1_srcdir
}
/functional
\
${
tr1_srcdir
}
/functional_iterate.h
\
${
tr1_srcdir
}
/memory
\
${
tr1_srcdir
}
/memory
\
${
tr1_srcdir
}
/tuple
\
${
tr1_srcdir
}
/tuple
\
${
tr1_srcdir
}
/utility
\
${
tr1_srcdir
}
/utility
\
...
...
libstdc++-v3/include/Makefile.in
View file @
0179f2c6
...
@@ -445,6 +445,7 @@ tr1_builddir = ./tr1
...
@@ -445,6 +445,7 @@ tr1_builddir = ./tr1
tr1_headers
=
\
tr1_headers
=
\
${
tr1_srcdir
}
/array
\
${
tr1_srcdir
}
/array
\
${
tr1_srcdir
}
/functional
\
${
tr1_srcdir
}
/functional
\
${
tr1_srcdir
}
/functional_iterate.h
\
${
tr1_srcdir
}
/memory
\
${
tr1_srcdir
}
/memory
\
${
tr1_srcdir
}
/tuple
\
${
tr1_srcdir
}
/tuple
\
${
tr1_srcdir
}
/utility
\
${
tr1_srcdir
}
/utility
\
...
...
libstdc++-v3/include/tr1/functional
View file @
0179f2c6
This diff is collapsed.
Click to expand it.
libstdc++-v3/include/tr1/functional_iterate.h
0 → 100644
View file @
0179f2c6
This diff is collapsed.
Click to expand it.
libstdc++-v3/testsuite/testsuite_tr1.h
View file @
0179f2c6
...
@@ -32,10 +32,10 @@
...
@@ -32,10 +32,10 @@
#define _GLIBCXX_TESTSUITE_TR1_H
#define _GLIBCXX_TESTSUITE_TR1_H
namespace
__gnu_test
namespace
__gnu_test
{
{
// For tr1/type_traits.
// For tr1/type_traits.
template
<
template
<
typename
>
class
Category
,
template
<
template
<
typename
>
class
Category
,
typename
Type
>
typename
Type
>
bool
bool
test_category
(
bool
value
)
test_category
(
bool
value
)
{
{
...
@@ -52,7 +52,7 @@ namespace __gnu_test
...
@@ -52,7 +52,7 @@ namespace __gnu_test
}
}
template
<
template
<
typename
>
class
Property
,
template
<
template
<
typename
>
class
Property
,
typename
Type
>
typename
Type
>
bool
bool
test_property
(
typename
Property
<
Type
>::
value_type
value
)
test_property
(
typename
Property
<
Type
>::
value_type
value
)
{
{
...
@@ -63,7 +63,7 @@ namespace __gnu_test
...
@@ -63,7 +63,7 @@ namespace __gnu_test
}
}
template
<
template
<
typename
>
class
Property
,
template
<
template
<
typename
>
class
Property
,
typename
Type
>
typename
Type
>
bool
bool
test_copy_property
(
bool
value
)
test_copy_property
(
bool
value
)
{
{
...
@@ -80,7 +80,7 @@ namespace __gnu_test
...
@@ -80,7 +80,7 @@ namespace __gnu_test
}
}
template
<
template
<
typename
>
class
Property
,
template
<
template
<
typename
>
class
Property
,
typename
Type
>
typename
Type
>
bool
bool
test_assign_property
(
bool
value
)
test_assign_property
(
bool
value
)
{
{
...
@@ -97,7 +97,7 @@ namespace __gnu_test
...
@@ -97,7 +97,7 @@ namespace __gnu_test
}
}
template
<
template
<
typename
,
typename
>
class
Relationship
,
template
<
template
<
typename
,
typename
>
class
Relationship
,
typename
Type1
,
typename
Type2
>
typename
Type1
,
typename
Type2
>
bool
bool
test_relationship
(
bool
value
)
test_relationship
(
bool
value
)
{
{
...
@@ -122,7 +122,68 @@ namespace __gnu_test
...
@@ -122,7 +122,68 @@ namespace __gnu_test
class
AbstractClass
class
AbstractClass
{
virtual
void
rotate
(
int
)
=
0
;
};
{
virtual
void
rotate
(
int
)
=
0
;
};
int
truncate_float
(
float
x
)
{
return
(
int
)
x
;
}
long
truncate_double
(
double
x
)
{
return
(
long
)
x
;
}
struct
do_truncate_float_t
{
do_truncate_float_t
()
{
++
live_objects
;
}
do_truncate_float_t
(
const
do_truncate_float_t
&
)
{
++
live_objects
;
}
~
do_truncate_float_t
()
{
--
live_objects
;
}
int
operator
()(
float
x
)
{
return
(
int
)
x
;
}
static
int
live_objects
;
};
int
do_truncate_float_t
::
live_objects
=
0
;
struct
do_truncate_double_t
{
do_truncate_double_t
()
{
++
live_objects
;
}
do_truncate_double_t
(
const
do_truncate_double_t
&
)
{
++
live_objects
;
}
~
do_truncate_double_t
()
{
--
live_objects
;
}
long
operator
()(
double
x
)
{
return
(
long
)
x
;
}
static
int
live_objects
;
};
int
do_truncate_double_t
::
live_objects
=
0
;
struct
X
{
int
bar
;
int
foo
()
{
return
1
;
}
int
foo_c
()
const
{
return
2
;
}
int
foo_v
()
volatile
{
return
3
;
}
int
foo_cv
()
const
volatile
{
return
4
;
}
};
};
// namespace __gnu_test
};
// namespace __gnu_test
#endif // _GLIBCXX_TESTSUITE_TR1_H
#endif // _GLIBCXX_TESTSUITE_TR1_H
libstdc++-v3/testsuite/tr1/3_function_objects/function/1.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
// Operations on empty function<> objects
void
test01
()
{
using
std
::
tr1
::
function
;
using
std
::
tr1
::
bad_function_call
;
// Default-construction
function
<
int
(
float
)
>
f1
;
VERIFY
(
((
bool
)
f1
==
false
)
);
VERIFY
(
!
f1
);
VERIFY
(
f1
==
0
);
VERIFY
(
0
==
f1
);
VERIFY
(
!
(
f1
!=
0
)
);
VERIFY
(
!
(
0
!=
f1
)
);
// Copy-construction
function
<
int
(
float
)
>
f2
(
f1
);
VERIFY
(
!
f2
);
// Construct with NULL pointer
function
<
int
(
float
)
>
f3
(
0
);
VERIFY
(
!
f3
);
// Assignment
f1
=
f2
;
VERIFY
(
!
f1
);
// Assignment to NULL pointer
f1
=
0
;
VERIFY
(
!
f1
);
// Swap
swap
(
f1
,
f2
);
VERIFY
(
!
f1
);
VERIFY
(
!
f2
);
// Invocation should throw bad_function_call
bool
thrown
=
false
;
try
{
f1
(
3.14159
f
);
VERIFY
(
false
);
}
catch
(
bad_function_call
)
{
thrown
=
true
;
}
VERIFY
(
thrown
);
// target_type returns typeid(void)
VERIFY
(
f1
.
target_type
()
==
typeid
(
void
)
);
// target() always returns a NULL pointer
VERIFY
(
f1
.
target
<
int
(
*
)(
float
)
>
()
==
0
);
// Check const version
const
function
<
int
(
float
)
>&
f1c
=
f1
;
VERIFY
(
f1c
.
target
<
int
(
*
)(
float
)
>
()
==
0
);
VERIFY
(
!
f1c
);
}
int
main
()
{
test01
();
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/function/2.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
// Put function pointers into function<> wrappers
void
test02
()
{
using
std
::
tr1
::
function
;
function
<
int
(
float
)
>
f1
(
truncate_float
);
VERIFY
(
f1
);
VERIFY
(
!!
f1
);
VERIFY
(
!
(
f1
==
0
)
);
VERIFY
(
!
(
0
==
f1
)
);
VERIFY
(
f1
!=
0
);
VERIFY
(
0
!=
f1
);
// Copy-construction
function
<
int
(
float
)
>
f2
(
f1
);
VERIFY
(
f2
);
// Invocation
VERIFY
(
f1
(
3.1
f
)
==
3
);
VERIFY
(
f2
(
3.1
f
)
==
3
);
// Assignment to zero
f1
=
0
;
VERIFY
(
!
f1
);
// Swap
f1
.
swap
(
f2
);
VERIFY
(
f1
);
VERIFY
(
!
f2
);
VERIFY
(
f1
(
3.1
f
)
==
3
);
// Assignment from a function pointer
f2
=
truncate_float
;
VERIFY
(
f2
(
3.1
f
)
==
3
);
// target_type and target() functions
const
function
<
int
(
float
)
>&
f1c
=
f1
;
VERIFY
(
typeid
(
int
(
*
)(
float
))
==
f1
.
target_type
()
);
VERIFY
(
f2
.
target
<
int
(
*
)(
float
)
>
()
!=
0
);
VERIFY
(
*
f2
.
target
<
int
(
*
)(
float
)
>
()
==
&
truncate_float
);
VERIFY
(
f1c
.
target
<
int
(
*
)(
float
)
>
()
!=
0
);
VERIFY
(
*
f1c
.
target
<
int
(
*
)(
float
)
>
()
==
&
truncate_float
);
}
int
main
()
{
test02
();
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/function/3.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
// Put nearly-matching function pointers into function<> wrappers
void
test03
()
{
using
std
::
tr1
::
function
;
function
<
int
(
float
)
>
f1
(
truncate_double
);
VERIFY
(
f1
);
VERIFY
(
!!
f1
);
VERIFY
(
!
(
f1
==
0
)
);
VERIFY
(
!
(
0
==
f1
)
);
VERIFY
(
f1
!=
0
);
VERIFY
(
0
!=
f1
);
// Copy-construction
function
<
int
(
float
)
>
f2
(
f1
);
VERIFY
(
f2
);
// Invocation
VERIFY
(
f1
(
3.1
f
)
==
3
);
VERIFY
(
f2
(
3.1
f
)
==
3
);
// Assignment to zero
f1
=
0
;
VERIFY
(
!
f1
);
// Swap
f1
.
swap
(
f2
);
VERIFY
(
f1
);
VERIFY
(
!
f2
);
VERIFY
(
f1
(
3.1
f
)
==
3
);
// Assignment from a function pointer
f2
=
truncate_double
;
VERIFY
(
f2
(
3.1
f
)
==
3
);
// target_type and target() functions
const
function
<
int
(
float
)
>&
f1c
=
f1
;
VERIFY
(
typeid
(
long
(
*
)(
double
))
==
f1
.
target_type
()
);
VERIFY
(
f2
.
target
<
long
(
*
)(
double
)
>
()
!=
0
);
VERIFY
(
*
f2
.
target
<
long
(
*
)(
double
)
>
()
==
&
truncate_double
);
VERIFY
(
f1c
.
target
<
long
(
*
)(
double
)
>
()
!=
0
);
VERIFY
(
*
f1c
.
target
<
long
(
*
)(
double
)
>
()
==
&
truncate_double
);
}
int
main
()
{
test03
();
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/function/4.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
// Put function objects into function<> wrappers
void
test04
()
{
using
std
::
tr1
::
function
;
do_truncate_float_t
truncate_float
;
function
<
int
(
float
)
>
f1
(
truncate_float
);
VERIFY
(
f1
);
VERIFY
(
!!
f1
);
VERIFY
(
!
(
f1
==
0
)
);
VERIFY
(
!
(
0
==
f1
)
);
VERIFY
(
f1
!=
0
);
VERIFY
(
0
!=
f1
);
// Copy-construction
function
<
int
(
float
)
>
f2
(
f1
);
VERIFY
(
f2
);
// Invocation
VERIFY
(
f1
(
3.1
f
)
==
3
);
VERIFY
(
f2
(
3.1
f
)
==
3
);
// Assignment to zero
f1
=
0
;
VERIFY
(
!
f1
);
// Swap
f1
.
swap
(
f2
);
VERIFY
(
f1
);
VERIFY
(
!
f2
);
VERIFY
(
f1
(
3.1
f
)
==
3
);
// Assignment from a function pointer
f2
=
do_truncate_float_t
();
VERIFY
(
f2
(
3.1
f
)
==
3
);
// target_type and target() functions
const
function
<
int
(
float
)
>&
f1c
=
f1
;
VERIFY
(
typeid
(
do_truncate_float_t
)
==
f1
.
target_type
()
);
VERIFY
(
f2
.
target
<
do_truncate_float_t
>
()
!=
0
);
VERIFY
(
f1c
.
target
<
do_truncate_float_t
>
()
!=
0
);
}
int
main
()
{
test04
();
VERIFY
(
do_truncate_double_t
::
live_objects
==
0
);
VERIFY
(
do_truncate_float_t
::
live_objects
==
0
);
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/function/5.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
// Put member pointers into function<> wrappers
void
test05
()
{
using
std
::
tr1
::
function
;
X
x
;
x
.
bar
=
17
;
function
<
int
(
X
&
)
>
frm
(
&
X
::
bar
);
VERIFY
(
frm
);
VERIFY
(
frm
(
x
)
==
17
);
VERIFY
(
typeid
(
int
X
::*
)
==
frm
.
target_type
()
);
VERIFY
(
*
frm
.
target
<
int
X
::*>
()
==
&
X
::
bar
);
function
<
int
(
X
&
)
>
fr
(
&
X
::
foo
);
VERIFY
(
fr
);
VERIFY
(
fr
(
x
)
==
1
);
VERIFY
(
typeid
(
int
(
X
::*
)())
==
fr
.
target_type
()
);
VERIFY
(
*
fr
.
target
<
int
(
X
::*
)()
>
()
==
&
X
::
foo
);
function
<
int
(
const
X
&
)
>
frc
(
&
X
::
foo_c
);
VERIFY
(
frc
);
VERIFY
(
frc
(
x
)
==
2
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
)
==
frc
.
target_type
()
);
VERIFY
(
*
frc
.
target
<
int
(
X
::*
)()
const
>
()
==
&
X
::
foo_c
);
function
<
int
(
volatile
X
&
)
>
frv
(
&
X
::
foo_v
);
VERIFY
(
frv
);
VERIFY
(
frv
(
x
)
==
3
);
VERIFY
(
typeid
(
int
(
X
::*
)()
volatile
)
==
frv
.
target_type
()
);
VERIFY
(
*
frv
.
target
<
int
(
X
::*
)()
volatile
>
()
==
&
X
::
foo_v
);
VERIFY
(
frv
.
target
<
int
(
X
::*
)()
const
volatile
>
()
==
0
);
function
<
int
(
const
volatile
X
&
)
>
frcv
(
&
X
::
foo_cv
);
VERIFY
(
frcv
);
VERIFY
(
frcv
(
x
)
==
4
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
volatile
)
==
frcv
.
target_type
()
);
VERIFY
(
*
frcv
.
target
<
int
(
X
::*
)()
const
volatile
>
()
==
&
X
::
foo_cv
);
VERIFY
(
frcv
.
target
<
int
(
X
::*
)()
const
>
()
==
0
);
function
<
int
(
X
*
)
>
grm
(
&
X
::
bar
);
VERIFY
(
grm
);
VERIFY
(
grm
(
&
x
)
==
17
);
VERIFY
(
typeid
(
int
X
::*
)
==
grm
.
target_type
()
);
VERIFY
(
*
grm
.
target
<
int
X
::*>
()
==
&
X
::
bar
);
function
<
int
(
X
*
)
>
gr
(
&
X
::
foo
);
VERIFY
(
gr
);
VERIFY
(
gr
(
&
x
)
==
1
);
VERIFY
(
typeid
(
int
(
X
::*
)())
==
gr
.
target_type
()
);
VERIFY
(
*
gr
.
target
<
int
(
X
::*
)()
>
()
==
&
X
::
foo
);
function
<
int
(
const
X
*
)
>
grc
(
&
X
::
foo_c
);
VERIFY
(
grc
);
VERIFY
(
grc
(
&
x
)
==
2
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
)
==
grc
.
target_type
()
);
VERIFY
(
*
grc
.
target
<
int
(
X
::*
)()
const
>
()
==
&
X
::
foo_c
);
function
<
int
(
volatile
X
*
)
>
grv
(
&
X
::
foo_v
);
VERIFY
(
grv
);
VERIFY
(
grv
(
&
x
)
==
3
);
VERIFY
(
typeid
(
int
(
X
::*
)()
volatile
)
==
grv
.
target_type
()
);
VERIFY
(
*
grv
.
target
<
int
(
X
::*
)()
volatile
>
()
==
&
X
::
foo_v
);
VERIFY
(
grv
.
target
<
int
(
X
::*
)()
const
volatile
>
()
==
0
);
function
<
int
(
const
volatile
X
*
)
>
grcv
(
&
X
::
foo_cv
);
VERIFY
(
grcv
);
VERIFY
(
grcv
(
&
x
)
==
4
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
volatile
)
==
grcv
.
target_type
()
);
VERIFY
(
*
grcv
.
target
<
int
(
X
::*
)()
const
volatile
>
()
==
&
X
::
foo_cv
);
VERIFY
(
grcv
.
target
<
int
(
X
::*
)()
const
>
()
==
0
);
}
int
main
()
{
test05
();
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/function/6.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
struct
secret
{};
struct
noncopyable_function_object_type
{
noncopyable_function_object_type
(
secret
)
{}
int
operator
()()
const
{
return
42
;
}
int
operator
()()
{
return
17
;
}
private
:
noncopyable_function_object_type
();
noncopyable_function_object_type
(
const
noncopyable_function_object_type
&
);
void
operator
=
(
const
noncopyable_function_object_type
&
);
};
// Put reference_wrappers into function<> wrappers
void
test06
()
{
using
std
::
tr1
::
function
;
using
std
::
tr1
::
ref
;
using
std
::
tr1
::
cref
;
secret
password
;
noncopyable_function_object_type
x
(
password
);
function
<
int
()
>
f
(
ref
(
x
));
VERIFY
(
f
);
VERIFY
(
f
()
==
17
);
VERIFY
(
f
.
target_type
()
==
typeid
(
noncopyable_function_object_type
)
);
VERIFY
(
f
.
target
<
noncopyable_function_object_type
>
()
==
&
x
);
function
<
int
()
>
g
=
f
;
VERIFY
(
g
);
VERIFY
(
g
()
==
17
);
VERIFY
(
g
.
target_type
()
==
typeid
(
noncopyable_function_object_type
)
);
VERIFY
(
g
.
target
<
noncopyable_function_object_type
>
()
==
&
x
);
function
<
int
()
>
h
=
cref
(
x
);
VERIFY
(
h
);
VERIFY
(
h
()
==
42
);
VERIFY
(
h
.
target_type
()
==
typeid
(
noncopyable_function_object_type
)
);
VERIFY
(
h
.
target
<
const
noncopyable_function_object_type
>
()
==
&
x
);
VERIFY
(
h
.
target
<
const
noncopyable_function_object_type
>
()
==
&
x
);
const
function
<
int
()
>&
hc
=
h
;
VERIFY
(
h
.
target
<
noncopyable_function_object_type
>
()
==
0
);
VERIFY
(
hc
.
target
<
noncopyable_function_object_type
>
()
==
&
x
);
}
int
main
()
{
test06
();
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/function/7.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
// Put reference_wrappers to function pointers into function<> wrappers
void
test07
()
{
using
std
::
tr1
::
function
;
using
std
::
tr1
::
ref
;
using
std
::
tr1
::
cref
;
int
(
*
fptr
)(
float
)
=
truncate_float
;
function
<
int
(
float
)
>
f1
(
ref
(
fptr
));
VERIFY
(
f1
);
VERIFY
(
!!
f1
);
VERIFY
(
!
(
f1
==
0
)
);
VERIFY
(
!
(
0
==
f1
)
);
VERIFY
(
f1
!=
0
);
VERIFY
(
0
!=
f1
);
// Invocation
VERIFY
(
f1
(
3.1
f
)
==
3
);
// target_type and target() functions
const
function
<
int
(
float
)
>&
f1c
=
f1
;
VERIFY
(
typeid
(
int
(
*
)(
float
))
==
f1
.
target_type
()
);
VERIFY
(
f1
.
target
<
int
(
*
)(
float
)
>
()
!=
0
);
VERIFY
(
f1
.
target
<
int
(
*
)(
float
)
>
()
==
&
fptr
);
VERIFY
(
f1c
.
target
<
int
(
*
)(
float
)
>
()
!=
0
);
VERIFY
(
f1c
.
target
<
int
(
*
)(
float
)
>
()
==
&
fptr
);
function
<
int
(
float
)
>
f2
(
cref
(
fptr
));
VERIFY
(
f2
);
VERIFY
(
!!
f2
);
VERIFY
(
!
(
f2
==
0
)
);
VERIFY
(
!
(
0
==
f2
)
);
VERIFY
(
f2
!=
0
);
VERIFY
(
0
!=
f2
);
// Invocation
VERIFY
(
f2
(
3.1
f
)
==
3
);
// target_type and target() functions
const
function
<
int
(
float
)
>&
f2c
=
f2
;
VERIFY
(
typeid
(
int
(
*
)(
float
))
==
f2
.
target_type
()
);
VERIFY
(
f2
.
target
<
int
(
*
)(
float
)
>
()
==
0
);
VERIFY
(
f2
.
target
<
int
(
*
const
)(
float
)
>
()
==
&
fptr
);
VERIFY
(
f2c
.
target
<
int
(
*
)(
float
)
>
()
!=
0
);
VERIFY
(
f2c
.
target
<
int
(
*
)(
float
)
>
()
==
&
fptr
);
}
int
main
()
{
test07
();
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/function/8.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
// Put reference_wrappers to member pointers
void
test08
()
{
using
std
::
tr1
::
function
;
using
std
::
tr1
::
ref
;
using
std
::
tr1
::
cref
;
int
X
::*
X_bar
=
&
X
::
bar
;
int
(
X
::*
X_foo
)()
=
&
X
::
foo
;
int
(
X
::*
X_foo_c
)()
const
=
&
X
::
foo_c
;
int
(
X
::*
X_foo_v
)()
volatile
=
&
X
::
foo_v
;
int
(
X
::*
X_foo_cv
)()
const
volatile
=
&
X
::
foo_cv
;
X
x
;
x
.
bar
=
17
;
function
<
int
(
X
&
)
>
frm
(
ref
(
X_bar
));
VERIFY
(
frm
);
VERIFY
(
frm
(
x
)
==
17
);
VERIFY
(
typeid
(
int
X
::*
)
==
frm
.
target_type
()
);
VERIFY
(
frm
.
target
<
int
X
::*>
()
==
&
X_bar
);
function
<
int
(
X
&
)
>
fr
(
ref
(
X_foo
));
VERIFY
(
fr
);
VERIFY
(
fr
(
x
)
==
1
);
VERIFY
(
typeid
(
int
(
X
::*
)())
==
fr
.
target_type
()
);
VERIFY
(
fr
.
target
<
int
(
X
::*
)()
>
()
==
&
X_foo
);
function
<
int
(
const
X
&
)
>
frc
(
ref
(
X_foo_c
));
VERIFY
(
frc
);
VERIFY
(
frc
(
x
)
==
2
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
)
==
frc
.
target_type
()
);
VERIFY
(
frc
.
target
<
int
(
X
::*
)()
const
>
()
==
&
X_foo_c
);
function
<
int
(
volatile
X
&
)
>
frv
(
ref
(
X_foo_v
));
VERIFY
(
frv
);
VERIFY
(
frv
(
x
)
==
3
);
VERIFY
(
typeid
(
int
(
X
::*
)()
volatile
)
==
frv
.
target_type
()
);
VERIFY
(
*
frv
.
target
<
int
(
X
::*
)()
volatile
>
()
==
X_foo_v
);
VERIFY
(
frv
.
target
<
int
(
X
::*
)()
const
volatile
>
()
==
0
);
function
<
int
(
const
volatile
X
&
)
>
frcv
(
ref
(
X_foo_cv
));
VERIFY
(
frcv
);
VERIFY
(
frcv
(
x
)
==
4
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
volatile
)
==
frcv
.
target_type
()
);
VERIFY
(
*
frcv
.
target
<
int
(
X
::*
)()
const
volatile
>
()
==
X_foo_cv
);
VERIFY
(
frcv
.
target
<
int
(
X
::*
)()
const
>
()
==
0
);
function
<
int
(
X
*
)
>
grm
(
ref
(
X_bar
));
VERIFY
(
grm
);
VERIFY
(
grm
(
&
x
)
==
17
);
VERIFY
(
typeid
(
int
X
::*
)
==
grm
.
target_type
()
);
VERIFY
(
*
grm
.
target
<
int
X
::*>
()
==
X_bar
);
function
<
int
(
X
*
)
>
gr
(
ref
(
X_foo
));
VERIFY
(
gr
);
VERIFY
(
gr
(
&
x
)
==
1
);
VERIFY
(
typeid
(
int
(
X
::*
)())
==
gr
.
target_type
()
);
VERIFY
(
*
gr
.
target
<
int
(
X
::*
)()
>
()
==
X_foo
);
function
<
int
(
const
X
*
)
>
grc
(
ref
(
X_foo_c
));
VERIFY
(
grc
);
VERIFY
(
grc
(
&
x
)
==
2
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
)
==
grc
.
target_type
()
);
VERIFY
(
*
grc
.
target
<
int
(
X
::*
)()
const
>
()
==
X_foo_c
);
function
<
int
(
volatile
X
*
)
>
grv
(
ref
(
X_foo_v
));
VERIFY
(
grv
);
VERIFY
(
grv
(
&
x
)
==
3
);
VERIFY
(
typeid
(
int
(
X
::*
)()
volatile
)
==
grv
.
target_type
()
);
VERIFY
(
*
grv
.
target
<
int
(
X
::*
)()
volatile
>
()
==
X_foo_v
);
VERIFY
(
grv
.
target
<
int
(
X
::*
)()
const
volatile
>
()
==
0
);
function
<
int
(
const
volatile
X
*
)
>
grcv
(
ref
(
X_foo_cv
));
VERIFY
(
grcv
);
VERIFY
(
grcv
(
&
x
)
==
4
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
volatile
)
==
grcv
.
target_type
()
);
VERIFY
(
*
grcv
.
target
<
int
(
X
::*
)()
const
volatile
>
()
==
X_foo_cv
);
VERIFY
(
grcv
.
target
<
int
(
X
::*
)()
const
>
()
==
0
);
function
<
int
(
X
&
)
>
hrm
(
cref
(
X_bar
));
VERIFY
(
hrm
);
VERIFY
(
hrm
(
x
)
==
17
);
VERIFY
(
typeid
(
int
X
::*
)
==
hrm
.
target_type
()
);
VERIFY
(
hrm
.
target
<
int
X
::*>
()
==
0
);
VERIFY
(
hrm
.
target
<
int
X
::*
const
>
()
==
&
X_bar
);
function
<
int
(
X
&
)
>
hr
(
cref
(
X_foo
));
VERIFY
(
hr
);
VERIFY
(
hr
(
x
)
==
1
);
VERIFY
(
typeid
(
int
(
X
::*
)())
==
hr
.
target_type
()
);
VERIFY
(
hr
.
target
<
int
(
X
::*
const
)()
>
()
==
&
X_foo
);
function
<
int
(
const
X
&
)
>
hrc
(
cref
(
X_foo_c
));
VERIFY
(
hrc
);
VERIFY
(
hrc
(
x
)
==
2
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
)
==
hrc
.
target_type
()
);
VERIFY
(
hrc
.
target
<
int
(
X
::*
const
)()
const
>
()
==
&
X_foo_c
);
function
<
int
(
volatile
X
&
)
>
hrv
(
cref
(
X_foo_v
));
VERIFY
(
hrv
);
VERIFY
(
hrv
(
x
)
==
3
);
VERIFY
(
typeid
(
int
(
X
::*
)()
volatile
)
==
hrv
.
target_type
()
);
VERIFY
(
hrv
.
target
<
int
(
X
::*
const
)()
volatile
>
()
==
&
X_foo_v
);
VERIFY
(
hrv
.
target
<
int
(
X
::*
const
)()
const
volatile
>
()
==
0
);
function
<
int
(
const
volatile
X
&
)
>
hrcv
(
cref
(
X_foo_cv
));
VERIFY
(
hrcv
);
VERIFY
(
hrcv
(
x
)
==
4
);
VERIFY
(
typeid
(
int
(
X
::*
)()
const
volatile
)
==
hrcv
.
target_type
()
);
VERIFY
(
hrcv
.
target
<
int
(
X
::*
const
)()
const
volatile
>
()
==
&
X_foo_cv
);
VERIFY
(
hrcv
.
target
<
int
(
X
::*
const
)()
const
>
()
==
0
);
}
int
main
()
{
test08
();
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/function/9.cc
0 → 100644
View file @
0179f2c6
// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.7.2 polymorphic function object wrapper
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
using
namespace
__gnu_test
;
bool
test
__attribute__
((
unused
))
=
true
;
// Put function objects into a void-returning function<> wrapper
void
test09
()
{
using
std
::
tr1
::
function
;
using
std
::
tr1
::
ref
;
using
std
::
tr1
::
cref
;
int
(
X
::*
X_foo_c
)()
const
=
&
X
::
foo_c
;
function
<
void
(
X
&
)
>
f
(
&
X
::
bar
);
f
=
&
X
::
foo
;
f
=
ref
(
X_foo_c
);
f
=
cref
(
X_foo_c
);
function
<
void
(
float
)
>
g
=
&
truncate_float
;
g
=
do_truncate_float_t
();
}
int
main
()
{
test09
();
VERIFY
(
do_truncate_double_t
::
live_objects
==
0
);
VERIFY
(
do_truncate_float_t
::
live_objects
==
0
);
return
0
;
}
libstdc++-v3/testsuite/tr1/3_function_objects/mem_fn.cc
0 → 100644
View file @
0179f2c6
// 2005-01-26 Douglas Gregor <dgregor@cs.indiana.edu>
//
// Copyright (C) 2005 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// 3.5 function template mem_fn
#include <tr1/functional>
#include <testsuite_hooks.h>
#include <testsuite_tr1.h>
struct
X
{
int
bar
;
};
struct
Y
:
X
{
};
template
<
typename
T
>
struct
dumb_ptr
{
dumb_ptr
(
T
*
p
)
:
p
(
p
)
{}
T
&
operator
*
()
const
{
return
*
p
;
}
private
:
T
*
p
;
};
// Test mem_fn with a data member
void
test01
()
{
using
std
::
tr1
::
mem_fn
;
X
x
;
Y
y
;
const
X
&
xc
=
x
;
const
Y
&
yc
=
y
;
X
*
xp
=
&
x
;
Y
*
yp
=&
y
;
const
X
*
xpc
=
xp
;
const
Y
*
ypc
=
yp
;
dumb_ptr
<
X
>
xd
(
xp
);
dumb_ptr
<
Y
>
yd
(
yp
);
const
dumb_ptr
<
X
>&
xdc
=
xd
;
const
dumb_ptr
<
Y
>&
ydc
=
yd
;
int
&
bx
=
mem_fn
(
&
X
::
bar
)(
x
);
const
int
&
bxc
=
mem_fn
(
&
X
::
bar
)(
xc
);
int
&
bxp
=
mem_fn
(
&
X
::
bar
)(
xp
);
const
int
&
bxpc
=
mem_fn
(
&
X
::
bar
)(
xpc
);
const
int
&
bxd
=
mem_fn
(
&
X
::
bar
)(
xd
);
const
int
&
bxdc
=
mem_fn
(
&
X
::
bar
)(
xdc
);
int
&
by
=
mem_fn
(
&
X
::
bar
)(
y
);
const
int
&
byc
=
mem_fn
(
&
X
::
bar
)(
yc
);
int
&
byp
=
mem_fn
(
&
X
::
bar
)(
yp
);
const
int
&
bypc
=
mem_fn
(
&
X
::
bar
)(
ypc
);
const
int
&
byd
=
mem_fn
(
&
X
::
bar
)(
yd
);
const
int
&
bydc
=
mem_fn
(
&
X
::
bar
)(
ydc
);
}
int
main
()
{
test01
();
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment