[libsigc++2/variadic_bind3: 19/45] Replace some uses of result_type with decltype(auto).
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsigc++2/variadic_bind3: 19/45] Replace some uses of result_type with decltype(auto).
- Date: Wed, 2 Mar 2016 13:43:03 +0000 (UTC)
commit 48ef0d2f3bda2837dfee59d3aeb7392c51bd658b
Author: Murray Cumming <murrayc murrayc com>
Date: Thu Jan 14 19:32:49 2016 +0100
Replace some uses of result_type with decltype(auto).
sigc++/adaptors/adaptor_trait.h | 11 +++--------
sigc++/adaptors/compose.h | 22 ++++++++--------------
sigc++/adaptors/exception_catch.h | 20 ++++++++------------
sigc++/adaptors/macros/bind.h.m4 | 4 ++--
sigc++/adaptors/macros/retype.h.m4 | 8 ++------
sigc++/adaptors/macros/track_obj.h.m4 | 2 +-
sigc++/signal.h | 22 +++++++++++-----------
7 files changed, 35 insertions(+), 54 deletions(-)
---
diff --git a/sigc++/adaptors/adaptor_trait.h b/sigc++/adaptors/adaptor_trait.h
index a9b2a72..9c20d0c 100644
--- a/sigc++/adaptors/adaptor_trait.h
+++ b/sigc++/adaptors/adaptor_trait.h
@@ -82,9 +82,9 @@ struct adaptor_functor : public adaptor_base
/** Invokes the wrapped functor passing on the arguments.
* @return The return value of the functor invocation.
*/
- result_type
- operator()() const;
-
+ decltype(auto)
+ operator()() const
+ { return functor_(); }
/** Invokes the wrapped functor passing on the arguments.
* @param _A_arg... Arguments to be passed on to the functor.
@@ -119,11 +119,6 @@ struct adaptor_functor : public adaptor_base
mutable T_functor functor_;
};
-template <class T_functor>
-typename adaptor_functor<T_functor>::result_type
-adaptor_functor<T_functor>::operator()() const
- { return functor_(); }
-
#ifndef DOXYGEN_SHOULD_SKIP_THIS
//template specialization of visitor<>::do_visit_each<>(action, functor):
/** Performs a functor on each of the targets of a functor.
diff --git a/sigc++/adaptors/compose.h b/sigc++/adaptors/compose.h
index 8d3a5ad..e57f009 100644
--- a/sigc++/adaptors/compose.h
+++ b/sigc++/adaptors/compose.h
@@ -46,8 +46,10 @@ struct compose1_functor : public adapts<T_setter>
typedef T_getter getter_type;
typedef typename adaptor_type::result_type result_type;
- result_type
- operator()();
+ decltype(auto)
+ operator()()
+ { return this->functor_(get_()); }
+
template <class... T_arg>
decltype(auto)
@@ -66,11 +68,6 @@ struct compose1_functor : public adapts<T_setter>
getter_type get_; // public, so that visit_each() can access it
};
-template <class T_setter, class T_getter>
-typename compose1_functor<T_setter, T_getter>::result_type
-compose1_functor<T_setter, T_getter>::operator()()
- { return this->functor_(get_()); }
-
/** Adaptor that combines three functors.
* Use the convenience function sigc::compose() to create an instance of sigc::compose2_functor.
*
@@ -90,8 +87,10 @@ struct compose2_functor : public adapts<T_setter>
typedef T_getter2 getter2_type;
typedef typename adaptor_type::result_type result_type;
- result_type
- operator()();
+ decltype(auto)
+ operator()()
+ { return this->functor_(get1_(), get2_()); }
+
template <class... T_arg>
decltype(auto)
@@ -114,11 +113,6 @@ struct compose2_functor : public adapts<T_setter>
getter2_type get2_; // public, so that visit_each() can access it
};
-template <class T_setter, class T_getter1, class T_getter2>
-typename compose2_functor<T_setter, T_getter1, T_getter2>::result_type
-compose2_functor<T_setter, T_getter1, T_getter2>::operator()()
- { return this->functor_(get1_(), get2_()); }
-
#ifndef DOXYGEN_SHOULD_SKIP_THIS
//template specialization of visitor<>::do_visit_each<>(action, functor):
/** Performs a functor on each of the targets of a functor.
diff --git a/sigc++/adaptors/exception_catch.h b/sigc++/adaptors/exception_catch.h
index 0eb6da6..80ef94b 100644
--- a/sigc++/adaptors/exception_catch.h
+++ b/sigc++/adaptors/exception_catch.h
@@ -60,8 +60,14 @@ struct exception_catch_functor : public adapts<T_functor>
typedef typename adapts<T_functor>::adaptor_type adaptor_type;
typedef T_return result_type;
- result_type
- operator()();
+ decltype(auto)
+ operator()()
+ {
+ try
+ { return this->functor_(); }
+ catch (...)
+ { return catcher_(); }
+ }
template <class... T_arg>
@@ -86,16 +92,6 @@ struct exception_catch_functor : public adapts<T_functor>
T_catcher catcher_;
};
-template <class T_functor, class T_catcher, class T_return>
-typename exception_catch_functor<T_functor, T_catcher, T_return>::result_type
-exception_catch_functor<T_functor, T_catcher, T_return>::operator()()
- {
- try
- { return this->functor_(); }
- catch (...)
- { return catcher_(); }
- }
-
// void specialization
template <class T_functor, class T_catcher>
struct exception_catch_functor<T_functor, T_catcher, void> : public adapts<T_functor>
diff --git a/sigc++/adaptors/macros/bind.h.m4 b/sigc++/adaptors/macros/bind.h.m4
index 655fd03..143068e 100644
--- a/sigc++/adaptors/macros/bind.h.m4
+++ b/sigc++/adaptors/macros/bind.h.m4
@@ -69,7 +69,7 @@ struct bind_functor<$1, T_functor, T_bound, LIST(LOOP(nil, CALL_SIZE - 1))> : pu
/** Invokes the wrapped functor passing on the bound argument only.
* @return The return value of the functor invocation.
*/
- result_type
+ decltype(auto)
operator()()
{
//Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
@@ -108,7 +108,7 @@ struct bind_functor<LIST(-1, T_functor, LIST(LOOP(T_type%1, $1), LOOP(nil, CALL_
/** Invokes the wrapped functor passing on the bound argument only.
* @return The return value of the functor invocation.
*/
- result_type
+ decltype(auto)
operator()()
{
//Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
diff --git a/sigc++/adaptors/macros/retype.h.m4 b/sigc++/adaptors/macros/retype.h.m4
index e2b84a5..96f359b 100644
--- a/sigc++/adaptors/macros/retype.h.m4
+++ b/sigc++/adaptors/macros/retype.h.m4
@@ -20,7 +20,8 @@ include(template.macros.m4)
define([RETYPE_OPERATOR],[dnl
ifelse($1,0,[dnl
- result_type operator()();
+ decltype(auto) operator()()
+ { return this->functor_(); }
],[dnl
template <LOOP(class T_arg%1, $1)>
@@ -134,11 +135,6 @@ FOR(0,CALL_SIZE,[[RETYPE_OPERATOR(%1)]])dnl
{}
};
-template <LIST(class T_functor, LOOP(class T_type%1, CALL_SIZE))>
-typename retype_functor<LIST(T_functor, LOOP(T_type%1, CALL_SIZE))>::result_type
-retype_functor<LIST(T_functor, LOOP(T_type%1, CALL_SIZE))>::operator()()
- { return this->functor_(); }
-
#ifndef DOXYGEN_SHOULD_SKIP_THIS
//template specialization of visitor<>::do_visit_each<>(action, functor):
/** Performs a functor on each of the targets of a functor.
diff --git a/sigc++/adaptors/macros/track_obj.h.m4 b/sigc++/adaptors/macros/track_obj.h.m4
index 971b701..b957eae 100644
--- a/sigc++/adaptors/macros/track_obj.h.m4
+++ b/sigc++/adaptors/macros/track_obj.h.m4
@@ -167,7 +167,7 @@ public:
/** Invokes the wrapped functor.
* @return The return value of the functor invocation.
*/
- result_type operator()()
+ decltype(auto) operator()()
{ return this->functor_(); }
diff --git a/sigc++/signal.h b/sigc++/signal.h
index 20f6652..6f0f130 100644
--- a/sigc++/signal.h
+++ b/sigc++/signal.h
@@ -317,7 +317,7 @@ struct slot_iterator_buf
slot_iterator_buf(const iterator_type& i, const emitter_type* c)
: i_(i), c_(c), invoked_(false) {}
- result_type operator*() const
+ decltype(auto) operator*() const
{
if (!i_->empty() && !i_->blocked() && !invoked_)
{
@@ -471,7 +471,7 @@ struct slot_reverse_iterator_buf
slot_reverse_iterator_buf(const iterator_type& i, const emitter_type* c)
: i_(i), c_(c), invoked_(false) {}
- result_type operator*() const
+ decltype(auto) operator*() const
{
iterator_type __tmp(i_);
--__tmp;
@@ -642,7 +642,7 @@ struct signal_emit
* @param _A_a Arguments to be passed on to the slots.
* @return The accumulated return values of the slot invocations as processed by the accumulator.
*/
- static result_type emit(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
+ static decltype(auto) emit(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
{
T_accumulator accumulator;
@@ -661,7 +661,7 @@ struct signal_emit
* @param _A_a Arguments to be passed on to the slots.
* @return The accumulated return values of the slot invocations as processed by the accumulator.
*/
- static result_type emit_reverse(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
+ static decltype(auto) emit_reverse(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
{
T_accumulator accumulator;
@@ -710,7 +710,7 @@ struct signal_emit<T_return, nil, T_arg...>
* @param last An iterator pointing to the last slot in the list. * @param _A_a Arguments to be passed
on to the slots.
* @return The return value of the last slot invoked.
*/
- static result_type emit(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
+ static decltype(auto) emit(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
{
if (!impl || impl->slots_.empty())
return T_return();
@@ -746,7 +746,7 @@ struct signal_emit<T_return, nil, T_arg...>
* @param _A_a%1 Argument to be passed on to the slots.
* @return The return value of the last slot invoked.
*/
- static result_type emit_reverse(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
+ static decltype(auto) emit_reverse(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
{
if (!impl || impl->slots_.empty())
return T_return();
@@ -802,7 +802,7 @@ struct signal_emit<void, nil, T_arg...>
/** Executes a list of slots using an accumulator of type @e T_accumulator. * The arguments are passed
directly on to the slots.
* @param _A_a Arguments to be passed on to the slots.
*/
- static result_type emit(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
+ static decltype(auto) emit(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
{
if (!impl || impl->slots_.empty()) return;
signal_exec exec(impl);
@@ -820,7 +820,7 @@ struct signal_emit<void, nil, T_arg...>
* @param first An iterator pointing to the first slot in the list.
* @param last An iterator pointing to the last slot in the list. * @param _A_a Arguments to be passed
on to the slots.
*/
- static result_type emit_reverse(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
+ static decltype(auto) emit_reverse(signal_impl* impl, type_trait_take_t<T_arg>... _A_a)
{
if (!impl || impl->slots_.empty()) return;
signal_exec exec(impl);
@@ -930,15 +930,15 @@ public:
* @param _A_a Arguments to be passed on to the slots.
* @return The accumulated return values of the slot invocations.
*/
- result_type emit(type_trait_take_t<T_arg>... _A_a) const
+ decltype(auto) emit(type_trait_take_t<T_arg>... _A_a) const
{ return emitter_type::emit(impl_, _A_a...); }
/** Triggers the emission of the signal in reverse order (see emit()). */
- result_type emit_reverse(type_trait_take_t<T_arg>... _A_a) const
+ decltype(auto) emit_reverse(type_trait_take_t<T_arg>... _A_a) const
{ return emitter_type::emit_reverse(impl_, _A_a...); }
/** Triggers the emission of the signal (see emit()). */
- result_type operator()(type_trait_take_t<T_arg>... _A_a) const
+ decltype(auto) operator()(type_trait_take_t<T_arg>... _A_a) const
{ return emit(_A_a...); }
/** Creates a functor that calls emit() on this signal.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]