28 #ifndef NDN_CXX_DETAIL_COMMON_HPP
29 #define NDN_CXX_DETAIL_COMMON_HPP
31 #include "ndn-cxx/detail/config.hpp"
34 #if __cplusplus < 201402L
35 #error "ndn-cxx applications must be compiled using the C++14 standard (-std=c++14)"
40 #ifdef NDN_CXX_HAVE_TESTS
41 #define NDN_CXX_VIRTUAL_WITH_TESTS virtual
42 #define NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PROTECTED public
43 #define NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE public
44 #define NDN_CXX_PROTECTED_WITH_TESTS_ELSE_PRIVATE protected
46 #define NDN_CXX_VIRTUAL_WITH_TESTS
47 #define NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PROTECTED protected
48 #define NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE private
49 #define NDN_CXX_PROTECTED_WITH_TESTS_ELSE_PRIVATE private
61 #include <type_traits>
66 using std::shared_ptr;
67 using std::unique_ptr;
69 using std::make_shared;
70 using std::make_unique;
72 using std::static_pointer_cast;
73 using std::dynamic_pointer_cast;
74 using std::const_pointer_cast;
78 using namespace std::string_literals;
82 using namespace std::placeholders;
84 #include <boost/version.hpp>
88 #if BOOST_VERSION < 107600
89 #define BOOST_BIND_NO_PLACEHOLDERS
90 #include <boost/is_placeholder.hpp>
92 #define NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(N) \
94 struct is_placeholder<std::remove_const_t<decltype(_##N)>> \
100 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(1)
101 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(2)
102 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(3)
103 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(4)
104 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(5)
105 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(6)
106 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(7)
107 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(8)
108 NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER(9)
109 #undef NDN_CXX_SPECIALIZE_BOOST_IS_PLACEHOLDER_FOR_STD_PLACEHOLDER
114 #include <boost/assert.hpp>
115 #include <boost/concept_check.hpp>
116 #include <boost/core/noncopyable.hpp>
119 using boost::noncopyable;