namespace senf {
namespace console {
+
+ template < class FunctionTraits,
+ class ReturnType=typename FunctionTraits::result_type,
+ unsigned arity=FunctionTraits::arity >
+ class ParsedCommandOverload;
+
+ template < class Overload,
+ unsigned index=0,
+ bool flag=(index < unsigned(Overload::traits::arity)) >
+ class ParsedArgumentAttributor;
+
namespace detail {
#ifndef DOXYGEN
struct ParsedCommandTraits
{};
- template <class Function>
- struct ParsedCommandTraits<Function, true>
+ template <class Fn>
+ struct ParsedCommandTraits<Fn, true>
{
- typedef Function base_type;
+ typedef Fn base_type;
typedef typename senf::remove_any_pointer<base_type>::type function_type;
typedef boost::function_traits<function_type> base_traits;
typedef typename FirstArgType<base_traits>::type first_arg_type;
base_traits>
::type traits;
+ typedef typename senf::remove_cvref<typename base_traits::result_type>::type result_type;
+
static const bool is_member = boost::is_member_pointer<base_type>::value;
typedef typename senf::member_class<base_type>::type class_type;
- };
- template <class Type>
- struct CheckVoidReturn
- {
- template <class Fn>
- static void call(Fn fn, std::ostream & os);
+ typedef ParsedCommandOverload<traits> Overload;
+ typedef ParsedArgumentAttributor<Overload> Attributor;
};
- template <>
- struct CheckVoidReturn<void>
- {
- template <class Fn>
- static void call(Fn fn, std::ostream & os);
- };
+ struct ParsedCommandAddNodeAccess;
#endif