// // Copyright (c) 2019-2024 Ruben Perez Hidalgo (rubenperez038 at gmail dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_MYSQL_DETAIL_EXECUTION_CONCEPTS_HPP #define BOOST_MYSQL_DETAIL_EXECUTION_CONCEPTS_HPP #include #include #include #include #ifdef BOOST_MYSQL_HAS_CONCEPTS namespace boost { namespace mysql { // Forward decls template class static_execution_state; template class static_results; class execution_state; class results; namespace detail { // Execution state template struct is_static_execution_state : std::false_type { }; template struct is_static_execution_state> : std::true_type { }; template concept execution_state_type = std::is_same_v || is_static_execution_state::value; // Results template struct is_static_results : std::false_type { }; template struct is_static_results> : std::true_type { }; template concept results_type = std::is_same_v || is_static_results::value; // Execution request template struct is_bound_statement_tuple : std::false_type { }; template struct is_bound_statement_tuple> : std::true_type { }; template struct is_bound_statement_range : std::false_type { }; template struct is_bound_statement_range> : std::true_type { }; template struct is_execution_request { using without_cvref = typename std::remove_cv::type>::type; static constexpr bool value = std::is_convertible::value || is_bound_statement_tuple::value || is_bound_statement_range::value; }; template concept execution_request = is_execution_request::value; } // namespace detail } // namespace mysql } // namespace boost #define BOOST_MYSQL_EXECUTION_STATE_TYPE ::boost::mysql::detail::execution_state_type #define BOOST_MYSQL_RESULTS_TYPE ::boost::mysql::detail::results_type #define BOOST_MYSQL_EXECUTION_REQUEST ::boost::mysql::detail::execution_request #else #define BOOST_MYSQL_EXECUTION_STATE_TYPE class #define BOOST_MYSQL_RESULTS_TYPE class #define BOOST_MYSQL_EXECUTION_REQUEST class #endif #endif