#ifndef METAL_LAMBDA_IS_INVOCABLE_HPP #define METAL_LAMBDA_IS_INVOCABLE_HPP #include "../config.hpp" #include "../detail/sfinae.hpp" #include "../lambda/invoke.hpp" #include "../value/same.hpp" #include namespace metal { /// \ingroup lambda /// /// ### Description /// Checks whether a \lambda is [invocable](\ref invoke) with some \values. /// /// ### Usage /// For any \lambda `lbd` and \values `val_0, ..., val_n-1` /// \code /// using result = metal::is_invocable; /// \endcode /// /// \returns: \number /// \semantics: /// If `lbd` holds \expression `expr`, and `expr` /// is well defined after template substitution, then /// \code /// using result = metal::true_; /// \endcode /// otherwise /// \code /// using result = metal::false_; /// \endcode /// /// ### Example /// \snippet lambda.cpp is_invocable /// /// ### See Also /// \see lambda, invoke template using is_invocable = same, detail::caller>::type>; } #endif