1 // Range v3 library 2 // 3 // Copyright Eric Niebler 2013-present 4 // 5 // Use, modification and distribution is subject to the 6 // Boost Software License, Version 1.0. (See accompanying 7 // file LICENSE_1_0.txt or copy at 8 // http://www.boost.org/LICENSE_1_0.txt) 9 // 10 // Project home: https://github.com/ericniebler/range-v3 11 // 12 13 #ifndef RANGES_V3_DETAIL_PROLOGUE_HPP 14 #define RANGES_V3_DETAIL_PROLOGUE_HPP 15 #include <range/v3/detail/config.hpp> 16 #endif 17 18 #ifdef RANGES_PROLOGUE_INCLUDED 19 #error "Prologue already included!" 20 #endif 21 #define RANGES_PROLOGUE_INCLUDED 22 23 RANGES_DIAGNOSTIC_PUSH 24 25 #ifdef RANGES_FEWER_WARNINGS 26 RANGES_DIAGNOSTIC_IGNORE_UNDEFINED_INTERNAL 27 RANGES_DIAGNOSTIC_IGNORE_INDENTATION 28 RANGES_DIAGNOSTIC_IGNORE_CXX17_COMPAT 29 #endif 30 31 RANGES_DIAGNOSTIC_KEYWORD_MACRO 32 33 #define template(...) \ 34 CPP_PP_IGNORE_CXX2A_COMPAT_BEGIN \ 35 template<__VA_ARGS__ CPP_TEMPLATE_AUX_ \ 36 37 #define AND CPP_and 38 39 /// \cond 40 #if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510 41 // noexcept is part of the type system 42 #define declval(...) static_cast<__VA_ARGS__(*)() noexcept>(nullptr)() 43 #else 44 // noexcept is not part of the type system 45 #define declval(...) static_cast<__VA_ARGS__(*)()>(nullptr)() 46 #endif 47 /// \cond 48