// (C) Copyright John Maddock 2018. // Use, modification and distribution are subject to 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_MATH_TOOLS_IS_CONST_ITERABLE_HPP #define BOOST_MATH_TOOLS_IS_CONST_ITERABLE_HPP #if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_SFINAE_EXPR) #define BOOST_MATH_HAS_IS_CONST_ITERABLE #include #include namespace boost { namespace math { namespace tools { namespace detail { template using begin_t = decltype(std::declval().begin()); template using end_t = decltype(std::declval().end()); template using const_iterator_t = typename T::const_iterator; template struct is_const_iterable : public boost::integral_constant::value && boost::is_detected::value && boost::is_detected::value > {}; } } } } #endif #endif // BOOST_MATH_TOOLS_IS_CONST_ITERABLE_HPP