8#ifndef INCLUDED_BSLMF_ISPOLYMORPHIC
9#define INCLUDED_BSLMF_ISPOLYMORPHIC
167#include <bslscm_version.h>
178#if defined(BSLS_PLATFORM_CMP_CLANG) \
179 || defined(BSLS_PLATFORM_CMP_GNU) \
180 || defined(BSLS_PLATFORM_CMP_MSVC) \
181 || (defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION >= 0x5130)
182# define BSLMF_ISPOLYMORPHIC_HAS_INTRINSIC
192#if defined(BSLMF_ISPOLYMORPHIC_HAS_INTRINSIC)
196template <
class t_TYPE>
197struct IsPolymorphic_Imp {
198 enum {
Value = __is_polymorphic(t_TYPE) };
203template <class t_TYPE, bool t_IS_CLASS = bsl::is_class<t_TYPE>::value>
215template <
class t_TYPE>
222 struct IsPoly :
public t_TYPE {
229 struct MaybePoly : public t_TYPE {
235 enum { Value = (
sizeof(IsPoly) ==
sizeof(MaybePoly)) };
250template <
class t_TYPE>
253 BloombergLP::bslmf::IsPolymorphic_Imp<
254 typename remove_cv<t_TYPE>::type>::Value> {
257#ifdef BSLS_COMPILERFEATURES_SUPPORT_VARIABLE_TEMPLATES
260template <
class t_TYPE>
283template <
class t_TYPE>
289#ifndef BDE_OPENSOURCE_PUBLICATION
294#ifdef bslmf_IsPolymorphic
295#undef bslmf_IsPolymorphic
298#define bslmf_IsPolymorphic bslmf::IsPolymorphic
#define BSLS_NOTHROW_SPEC
Definition bsls_exceptionutil.h:386
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
#define BSLS_KEYWORD_INLINE_VARIABLE
Definition bsls_keyword.h:623
Definition bdlb_printmethods.h:283
Definition bdlbb_blob.h:576
Definition bslmf_integralconstant.h:244
Definition bslmf_ispolymorphic.h:254
virtual ~IsPoly() BSLS_NOTHROW_SPEC
~MaybePoly() BSLS_NOTHROW_SPEC
Definition bslmf_ispolymorphic.h:204
@ Value
Definition bslmf_ispolymorphic.h:212
Definition bslmf_ispolymorphic.h:284