// Copyright René Ferdinand Rivera Morell // Copyright 2021 Max Ferger // Copyright 2017 Two Blue Cubes Ltd. All rights reserved. // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef LYRA_LYRA_HPP #define LYRA_LYRA_HPP #ifndef LYRA_VERSION_HPP #define LYRA_VERSION_HPP #define LYRA_VERSION_MAJOR 1 #define LYRA_VERSION_MINOR 7 #define LYRA_VERSION_PATCH 0 #define LYRA_VERSION \ (((LYRA_VERSION_MAJOR)*10000000) + ((LYRA_VERSION_MINOR)*100000) \ + (LYRA_VERSION_PATCH)) #endif // LYRA_VERSION_HPP #ifndef LYRA_ARG_HPP #define LYRA_ARG_HPP #ifndef LYRA_DETAIL_BOUND_HPP #define LYRA_DETAIL_BOUND_HPP #ifndef LYRA_DETAIL_FROM_STRING_HPP #define LYRA_DETAIL_FROM_STRING_HPP #ifndef LYRA_DETAIL_TRAIT_UTILS_HPP #define LYRA_DETAIL_TRAIT_UTILS_HPP #include #include namespace lyra { namespace detail { template struct is_callable { template static auto test(U * p) -> decltype((*p)(std::declval()...), void(), std::true_type()); template static auto test(...) -> decltype(std::false_type()); static constexpr bool value = decltype(test(nullptr))::value; }; template struct remove_cvref { using type = typename std::remove_cv::type>::type; }; template struct is_invocable { template static auto test( U * p) -> decltype((&U::operator()), void(), std::true_type()); template static auto test(...) -> decltype(std::false_type()); static constexpr bool value = decltype(test::type>(nullptr))::value; }; template struct make_void { typedef void type; }; template using valid_t = typename make_void::type; template class Primary> struct is_specialization_of : std::false_type {}; template