Files
@ a13c26fb9289
Branch filter:
Location: libtransport.git/include/boost/dll/detail/strip_calling_convention.hpp
a13c26fb9289
5.0 KiB
text/x-c++hdr
spectrum2_manager: use get_http_var to get post/get variables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | // Copyright 2015 Antony Polukhin.
//
// 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_DLL_DETAIL_STRIP_CALLING_CONVENTION_HPP
#define BOOST_DLL_DETAIL_STRIP_CALLING_CONVENTION_HPP
#include <boost/config.hpp>
#ifdef BOOST_HAS_PRAGMA_ONCE
# pragma once
#endif
namespace boost { namespace dll { namespace detail {
template <class T>
struct strip_calling_convention {
typedef T type;
};
#ifdef _MSC_VER
// stripping __fastcall
template <class Ret, class Arg1>
struct strip_calling_convention<Ret __fastcall (Arg1)> {
typedef Ret(type)(Arg1);
};
template <class Ret, class Arg1, class Arg2>
struct strip_calling_convention<Ret __fastcall (Arg1, Arg2)> {
typedef Ret(type)(Arg1, Arg2);
};
template <class Ret, class Arg1, class Arg2, class Arg3>
struct strip_calling_convention<Ret __fastcall (Arg1, Arg2, Arg3)> {
typedef Ret(type)(Arg1, Arg2, Arg3);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4>
struct strip_calling_convention<Ret __fastcall (Arg1, Arg2, Arg3, Arg4)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
struct strip_calling_convention<Ret __fastcall (Arg1, Arg2, Arg3, Arg4, Arg5)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
struct strip_calling_convention<Ret __fastcall (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
struct strip_calling_convention<Ret __fastcall (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8>
struct strip_calling_convention<Ret __fastcall (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9>
struct strip_calling_convention<Ret __fastcall (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9);
};
// stripping __stdall
template <class Ret, class Arg1>
struct strip_calling_convention<Ret __stdcall (Arg1)> {
typedef Ret(type)(Arg1);
};
template <class Ret, class Arg1, class Arg2>
struct strip_calling_convention<Ret __stdcall (Arg1, Arg2)> {
typedef Ret(type)(Arg1, Arg2);
};
template <class Ret, class Arg1, class Arg2, class Arg3>
struct strip_calling_convention<Ret __stdcall (Arg1, Arg2, Arg3)> {
typedef Ret(type)(Arg1, Arg2, Arg3);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4>
struct strip_calling_convention<Ret __stdcall (Arg1, Arg2, Arg3, Arg4)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
struct strip_calling_convention<Ret __stdcall (Arg1, Arg2, Arg3, Arg4, Arg5)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
struct strip_calling_convention<Ret __stdcall (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
struct strip_calling_convention<Ret __stdcall (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8>
struct strip_calling_convention<Ret __stdcall (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8);
};
template <class Ret, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9>
struct strip_calling_convention<Ret __stdcall (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> {
typedef Ret(type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9);
};
#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
// Some of the MSVC versions have issues in variadic templates implementation.
// So we leave previous specializations visible even if variadic templates are allowed
template <class Ret, class... Args>
struct strip_calling_convention<Ret __fastcall (Args...)> {
typedef Ret(type)(Args...);
};
template <class Ret, class... Args>
struct strip_calling_convention<Ret __stdcall (Args...)> {
typedef Ret(type)(Args...);
};
#endif // #ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
#endif // #ifdef _MSC_VER
}}} // namespace boost::dll::detail
#endif // #ifndef BOOST_DLL_DETAIL_STRIP_CALLING_CONVENTION_HPP
|