42#ifndef TEUCHOS_GET_BASE_OBJ_VOID_PTR_HPP
43#define TEUCHOS_GET_BASE_OBJ_VOID_PTR_HPP
46#include "TeuchosCore_ConfigDefs.hpp"
50#if defined(HAVE_TEUCHOSCORE_CXX11)
51# define HAS_TEUCHOS_GET_BASE_OBJ_VOID_PTR 1
52# include <type_traits>
53#elif defined(HAVE_TEUCHOSCORE_BOOST) && defined(HAVE_TEUCHOSCORE_BOOST_IS_POLYMORPHIC)
54# define HAS_TEUCHOS_GET_BASE_OBJ_VOID_PTR 1
55# include <boost/type_traits/is_polymorphic.hpp>
62#ifdef HAS_TEUCHOS_GET_BASE_OBJ_VOID_PTR
65template<
bool isPolymorphic,
typename T>
66class GetBaseObjVoidPtrImpl {};
69class GetBaseObjVoidPtrImpl<true, T> {
73 return dynamic_cast<const void*
>(
p);
79class GetBaseObjVoidPtrImpl<false, T> {
83 return static_cast<const void*
>(
p);
105const void* getBaseObjVoidPtr(T *p)
107#if defined(HAVE_TEUCHOSCORE_CXX11)
108 const bool isPoly = std::is_polymorphic<T>::value;
109#elif defined(HAVE_TEUCHOSCORE_BOOST) && defined(HAVE_TEUCHOSCORE_BOOST_IS_POLYMORPHIC)
110 const bool isPoly = boost::is_polymorphic<T>::value;
112 typedef GetBaseObjVoidPtrImpl<isPoly, T> GBOVPT;
113 return GBOVPT::getBaseObjVoidPtr(p);
Teuchos header file which uses auto-configuration information to include necessary C++ headers.
RCP(ENull null_arg=null)
Initialize RCP<T> to NULL.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...