8#ifndef INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS
9#define INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS
100#include <bslscm_version.h>
108#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
114# define COMPILING_BSLMF_FUNCTIONPOINTERTRAITS_H
116# undef COMPILING_BSLMF_FUNCTIONPOINTERTRAITS_H
146template <
class t_PROTOTYPE>
159template <
class t_PROTOTYPE>
163 FunctionPointerTraits<t_PROTOTYPE>::IS_FUNCTION_POINTER> {
168#if defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES) && \
169 !defined(BSLS_COMPILERFEATURES_SUPPORT_VARIADIC_TEMPLATES)
173# error Feature not supported for compilers without variadic templates
180#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
184#if defined(BSLS_PLATFORM_CMP_CLANG) && (!defined(BSLS_PLATFORM_OS_DARWIN) \
185 || BSLS_PLATFORM_CMP_VERSION > 130000)
186#pragma clang diagnostic push
187#pragma clang diagnostic ignored "-Wdeprecated-volatile"
192template <
class t_BSLMF_RETURN,
class... t_ARGS>
196 IS_FUNCTION_POINTER = 1,
199 enum { e_IS_VARARG = 0 };
208template <
class t_BSLMF_RETURN,
class... t_ARGS>
212 IS_FUNCTION_POINTER = 1,
215 enum { e_IS_VARARG = 1 };
222#if defined(BSLS_PLATFORM_CMP_CLANG)
223#pragma clang diagnostic pop
228#if defined(BSLS_PLATFORM_CMP_MSVC)
235template <
class t_PROTOTYPE>
244template <
class t_PROTOTYPE>
245struct FunctionPointerTraits<t_PROTOTYPE volatile>
246: FunctionPointerTraits<t_PROTOTYPE> {
253template <
class t_PROTOTYPE>
254struct FunctionPointerTraits<t_PROTOTYPE const volatile>
255: FunctionPointerTraits<t_PROTOTYPE> {
266template <
class t_PROTOTYPE>
275template <
class t_PROTOTYPE>
284template <
class t_PROTOTYPE>
291#ifdef BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES
293#if defined(BSLS_PLATFORM_CMP_CLANG)
294#pragma clang diagnostic push
295#pragma clang diagnostic ignored "-Wdeprecated-volatile"
300template <
class t_BSLMF_RETURN,
class... t_ARGS>
304 IS_FUNCTION_POINTER = 1,
307 enum { e_IS_VARARG = 0 };
308 typedef t_BSLMF_RETURN ResultType;
309 typedef typename TypeList<t_ARGS...>::Type ArgumentList;
310 typedef t_BSLMF_RETURN FuncType(t_ARGS...) noexcept;
311 typedef FunctionPointerCPlusPlusLinkage Linkage;
317template <class t_BSLMF_RETURN, class... t_ARGS>
318struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...,...) noexcept> {
321 IS_FUNCTION_POINTER = 1,
324 enum { e_IS_VARARG = 1 };
325 typedef t_BSLMF_RETURN ResultType;
326 typedef typename TypeList<t_ARGS...>::Type ArgumentList;
327 typedef t_BSLMF_RETURN FuncType(t_ARGS...,...) noexcept;
328 typedef FunctionPointerCPlusPlusLinkage Linkage;
331#if defined(BSLS_PLATFORM_CMP_CLANG)
332#pragma clang diagnostic pop
339#ifndef BDE_OPENSOURCE_PUBLICATION
351#ifdef bslmf_FunctionPointerTraits
352#undef bslmf_FunctionPointerTraits
355#define bslmf_FunctionPointerTraits bslmf::FunctionPointerTraits
357#ifdef bslmf_IsFunctionPointer
358#undef bslmf_IsFunctionPointer
361#define bslmf_IsFunctionPointer bslmf::IsFunctionPointer
bslmf::FunctionPointerCLinkage bslmf_FunctionPointerCLinkage
This alias is defined for backward compatibility.
Definition bslmf_functionpointertraits.h:349
bslmf::FunctionPointerCPlusPlusLinkage bslmf_FunctionPointerCPlusPlusLinkage
This alias is defined for backward compatibility.
Definition bslmf_functionpointertraits.h:346
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlbb_blob.h:579
Definition bslmf_integralconstant.h:261
Definition bslmf_functionpointertraits.h:133
Definition bslmf_functionpointertraits.h:127
TypeList< t_ARGS... >::Type ArgumentList
Definition bslmf_functionpointertraits.h:217
t_BSLMF_RETURN FuncType(t_ARGS...,...)
Definition bslmf_functionpointertraits.h:218
t_BSLMF_RETURN ResultType
Definition bslmf_functionpointertraits.h:216
FunctionPointerCPlusPlusLinkage Linkage
Definition bslmf_functionpointertraits.h:219
TypeList< t_ARGS... >::Type ArgumentList
Definition bslmf_functionpointertraits.h:201
t_BSLMF_RETURN ResultType
Definition bslmf_functionpointertraits.h:200
t_BSLMF_RETURN FuncType(t_ARGS...)
Definition bslmf_functionpointertraits.h:202
FunctionPointerCPlusPlusLinkage Linkage
Definition bslmf_functionpointertraits.h:203
Definition bslmf_functionpointertraits.h:147
@ IS_FUNCTION_POINTER
Definition bslmf_functionpointertraits.h:149
Definition bslmf_functionpointertraits.h:163
Definition bslmf_typelist.h:1612