- // Get the slot so that it can be copied
- template<typename F>
- reference_wrapper<const F>
- get_invocable_slot(const F& f, signals::detail::signal_tag)
- { return reference_wrapper<const F>(f); }
-
- template<typename F>
- const F& get_invocable_slot(const F& f, signals::detail::reference_tag)
- { return f; }
-
- template<typename F>
- const F& get_invocable_slot(const F& f, signals::detail::value_tag)
- { return f; }
-
- // Get the slot so that it can be inspected for trackable objects
- template<typename F>
- const F& get_inspectable_slot(const F& f,
- signals::detail::signal_tag)
- { return f; }
-
- template<typename F>
- const F& get_inspectable_slot(const F& f,
- signals::detail::reference_tag)
- { return f.get(); }
-
- template<typename F>
- const F& get_inspectable_slot(const F& f, signals::detail::value_tag)
- { return f; }
-
- // Determines the type of the slot - is it a signal, a reference to a
- // slot or just a normal slot.
- template<typename F>
- typename signals::detail::get_slot_tag<F>::type
- tag_type(const F&)
- {
- typename signals::detail::get_slot_tag<F>::type tag;
- return tag;
- }
-
- mutable std::vector<const trackable*> bound_objects;
- connection watch_bound_objects;