Utils/Logger: Remove dependency on libboost_datetime
[senf.git] / Console / ScopedDirectory.hh
index e86dc59..cd5b9b4 100644 (file)
@@ -49,15 +49,17 @@ namespace console {
                                       * static_cast<DirectoryNode *>(0),
                                       * static_cast<Owner *>(0),
                                       * static_cast<std::string const *>(0),
-                                      * static_cast<Object const *>(0),
-                                      * static_cast<int *>(0)) ) result_type;
+                                      * static_cast<Object *>(0),
+                                      * static_cast<int *>(0)) ) base_type;
+        typedef typename senf::remove_cvref<base_type>::type value_type;
 
-        typedef typename boost::remove_reference<result_type>::type NodeType;
+        typedef typename value_type::node_type NodeType;
+        typedef typename value_type::return_type result_type;
 
         /// Internal
         struct Creator {
-            static NodeType & create(DirectoryNode & node, Owner & owner, 
-                                     std::string const & name, Object const & ob);
+            static result_type create(DirectoryNode & node, Owner & owner, 
+                                     std::string const & name, Object & ob);
         };
     };
     
@@ -146,8 +148,8 @@ namespace console {
         ///////////////////////////////////////////////////////////////////////////
 
         template <class Object>
-        typename OwnerNodeCreateTraits<Owner, Object>::NodeType & add(std::string const & name,
-                                                                      Object const & ob);
+        typename OwnerNodeCreateTraits<Owner, Object>::result_type add(std::string const & name,
+                                                                       Object const & ob);
                                         ///< Create new child node
                                         /**< Adds a new child node to the (proxied)
                                              DirectoryNode. How the node is added is configured
@@ -155,22 +157,33 @@ namespace console {
                                              implementation just forwards the call to the proxied
                                              directory node. */
 
+        template <class Object>
+        typename OwnerNodeCreateTraits<Owner, Object>::result_type add(std::string const & name,
+                                                                       Object & ob);
+                                        ///< Create new child node
+                                        /**< \see add() */
+
     protected:
 
     private:
         Owner * owner_;
     };
 
+#ifndef DOXYGEN
+
     template <>
     class ScopedDirectory<void> : public ScopedDirectoryBase
     {
     public:
         template <class Object>
-        typename NodeCreateTraits<Object>::NodeType & add(std::string const & name,
-                                                          Object const & ob);
+        typename NodeCreateTraits<Object>::result_type add(std::string const & name,
+                                                           Object const & ob);
+
+        template <class Object>
+        typename NodeCreateTraits<Object>::result_type add(std::string const & name,
+                                                           Object & ob);
     };
 
-#ifndef DOXYGEN
     template <class Owner, class Function>
     SimpleCommandNode & senf_console_add_node(
         DirectoryNode & node, Owner & owner, std::string const & name, Function const & fn, ...);