| | #ifndef METAL_LAMBDA_PARTIAL_HPP |
| | #define METAL_LAMBDA_PARTIAL_HPP |
| |
|
| | #include "../config.hpp" |
| |
|
| | namespace metal { |
| | |
| | namespace detail { |
| | template <class lbd, class... vals> |
| | struct _partial; |
| | } |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | template <class lbd, class... vals> |
| | using partial = typename detail::_partial<lbd, vals...>::type; |
| | } |
| |
|
| | #include "../lambda/invoke.hpp" |
| | #include "../lambda/lambda.hpp" |
| | #include "../value/same.hpp" |
| |
|
| | namespace metal { |
| | |
| | namespace detail { |
| | template <class lbd, class... leading> |
| | struct _partial { |
| | }; |
| |
|
| | template <template <class...> class expr, class... leading> |
| | struct _partial<lambda<expr>, leading...> { |
| | template <class... trailing> |
| | using impl = invoke<lambda<expr>, leading..., trailing...>; |
| |
|
| | using type = lambda<impl>; |
| | }; |
| |
|
| | template <class x> |
| | struct _partial<lambda<same>, x> { |
| | template <class y> |
| | using impl = same<x, y>; |
| |
|
| | using type = lambda<impl>; |
| | }; |
| |
|
| | template <template <class...> class expr> |
| | struct _partial<lambda<expr>> { |
| | using type = lambda<expr>; |
| | }; |
| | } |
| | |
| | } |
| |
|
| | #endif |
| |
|