--- /dev/null
+
+#if !defined(INCLUDED_SIGNALFWD_H)
+#define INCLUDED_SIGNALFWD_H
+
+class SignalHandler;
+template<typename FirstArgument>
+class SignalHandler1;
+template<typename FirstArgument, typename SecondArgument>
+class SignalHandler2;
+template<typename FirstArgument, typename SecondArgument, typename ThirdArgument>
+class SignalHandler3;
+
+template<typename Context>
+class Opaque;
+
+///\brief A pointer that always has a well-defined value.
+/// If no value is specified, the appropriate null value is used.
+template<typename Type>
+class Handle
+{
+ Type* p;
+public:
+ Handle() : p(0)
+ {
+ }
+ explicit Handle(Type* p) : p(p)
+ {
+ }
+ Type* get() const
+ {
+ return p;
+ }
+ bool isNull() const
+ {
+ return p == 0;
+ }
+};
+
+template<typename Handler>
+class SignalFwd
+{
+public:
+ typedef Handle< Opaque<Handler> > handler_id_type;
+};
+
+typedef SignalFwd<SignalHandler>::handler_id_type SignalHandlerId;
+
+#endif