From 3270a66b5550ae9c5b9a6b6b46eb7973dac015d7 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Sun, 13 Nov 2005 12:14:15 +0000 Subject: [PATCH] [multiple changes] 2005-11-13 Jonathan Wakely * include/tr1/boost_shared_ptr.h (get_deleter): Declare before shared_ptr. (shared_ptr<>): Declare get_deleter as friend. (shared_ptr<>:_M_get_deleter): Private. 2005-11-13 Douglas Gregor PR libstdc++/24818 * include/tr1/ref_wrap_iterate.h (reference_wrapper::operator()()): Don't dereferene the result of get() before calling it; it's already a reference. * testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc: Test nullary calls to reference_wrappers. From-SVN: r106862 --- libstdc++-v3/ChangeLog | 16 ++++++++++++++++ libstdc++-v3/include/tr1/ref_wrap_iterate.h | 2 +- .../reference_wrapper/invoke.cc | 13 +++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1d812ccc475..f60ef609999 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,19 @@ +2005-11-13 Jonathan Wakely + + * include/tr1/boost_shared_ptr.h (get_deleter): + Declare before shared_ptr. + (shared_ptr<>): Declare get_deleter as friend. + (shared_ptr<>:_M_get_deleter): Private. + +2005-11-13 Douglas Gregor + + PR libstdc++/24818 + * include/tr1/ref_wrap_iterate.h + (reference_wrapper::operator()()): Don't dereferene the result of + get() before calling it; it's already a reference. + * testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc: + Test nullary calls to reference_wrappers. + 2005-11-11 Paolo Carlini PR libstdc++/24808 diff --git a/libstdc++-v3/include/tr1/ref_wrap_iterate.h b/libstdc++-v3/include/tr1/ref_wrap_iterate.h index d94ddc50b31..471547d0a14 100644 --- a/libstdc++-v3/include/tr1/ref_wrap_iterate.h +++ b/libstdc++-v3/include/tr1/ref_wrap_iterate.h @@ -40,5 +40,5 @@ template<_GLIBCXX_TEMPLATE_PARAMS> #else typename result_of<_M_func_type()>::type operator()() const -{ return (*get())(); } +{ return get()(); } #endif diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc index 4fe402a5c5e..b1eb999c6cf 100644 --- a/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc +++ b/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc @@ -56,11 +56,20 @@ struct X X& operator=(const X&); }; +int seventeen() { return 17; } + +struct get_seventeen +{ + typedef int result_type; + int operator()() const { return 17; } +}; + void test01() { using std::tr1::ref; using std::tr1::cref; + ::get_seventeen get_sev; ::X x; ::X* xp = &x; int (::X::* p_foo)(float) = &::X::foo; @@ -73,9 +82,11 @@ void test01() // Functions VERIFY(ref(truncate_float)(pi) == 3); + VERIFY(ref(seventeen)() == 17); // Function pointers VERIFY(cref(&truncate_float)(pi) == 3); + VERIFY(cref(&seventeen)() == 17); // Member function pointers VERIFY(ref(p_foo)(x, pi) == 3); @@ -92,6 +103,8 @@ void test01() VERIFY(ref(p_bar)(xp) == 17); // Function objects + VERIFY(ref(get_sev)() == 17); + VERIFY(cref(get_sev)() == 17); VERIFY(ref(x)(pi) == 4); VERIFY(cref(x)(pi) == 5); }