#ifndef SPROUT_BREED_ARGS_HPP #define SPROUT_BREED_ARGS_HPP #include #include #include #include namespace sprout { namespace breed { namespace detail { template struct ref_only : public std::integral_constant< bool, std::is_function::value > {}; template struct expr_traits { public: typedef Expr value_type; typedef Expr& reference; typedef Expr const& const_reference; }; template struct expr_traits { public: typedef Expr value_type; typedef Expr& reference; typedef Expr& const_reference; }; template struct expr_traits { public: typedef Expr value_type; typedef Expr const& reference; typedef Expr const& const_reference; }; template struct term_traits { public: typedef T value_type; typedef T& reference; typedef T const& const_reference; }; template struct term_traits { public: typedef typename std::conditional::value, T&, T>::type value_type; typedef T& reference; typedef T& const_reference; }; template struct term_traits { public: typedef T value_type; typedef T const& reference; typedef T const& const_reference; }; template struct term_traits { public: typedef T value_type[N]; typedef T (&reference)[N]; typedef T (&const_reference)[N]; }; template struct term_traits { public: typedef T value_type[N]; typedef T const (&reference)[N]; typedef T const (&const_reference)[N]; }; template struct term_traits { public: typedef T value_type[N]; typedef T (&reference)[N]; typedef T const (&const_reference)[N]; }; template struct term_traits { public: typedef T value_type[N]; typedef T const (&reference)[N]; typedef T const (&const_reference)[N]; }; } // namespace detail namespace argsns_ { // // term // template struct term { public: SPROUT_STATIC_CONSTEXPR long arity = 0; public: template struct child : public sprout::tppack_at {}; public: typedef Arg back_; }; // // list // template struct list { public: SPROUT_STATIC_CONSTEXPR long arity = sizeof...(Args); public: template struct child : public sprout::tppack_at {}; public: typedef typename child::type back_; }; } // namespace argsns_ { } // namespace breed } // namespace sprout #endif // #ifndef SPROUT_BREED_ARGS_HPP