7#ifndef PXR_BASE_TF_CXX_CAST_H
8#define PXR_BASE_TF_CXX_CAST_H
14#error This include file can only be included in C++ programs.
20PXR_NAMESPACE_OPEN_SCOPE
22template <
class Src,
class Dst>
24 typename std::conditional<std::is_const<Src>::value,
25 typename std::add_const<Dst>::type, Dst>::type;
27template <
class Src,
class Dst>
28using Tf_CopyVolatile =
29 typename std::conditional<std::is_volatile<Src>::value,
30 typename std::add_volatile<Dst>::type, Dst>::type;
32template <
class Src,
class Dst>
33using Tf_CopyCV = Tf_CopyConst<Src, Tf_CopyVolatile<Src, Dst>>;
48inline typename std::enable_if<
49 std::is_polymorphic<T>::value, Tf_CopyCV<T, void>*>::type
52 return dynamic_cast<Tf_CopyCV<T, void>*
>(ptr);
56inline typename std::enable_if<
57 !std::is_polymorphic<T>::value, Tf_CopyCV<T, void>*>::type
60 return static_cast<Tf_CopyCV<T, void>*
>(ptr);
63PXR_NAMESPACE_CLOSE_SCOPE
std::enable_if< std::is_polymorphic< T >::value, Tf_CopyCV< T, void > * >::type TfCastToMostDerivedType(T *ptr)
Return a pointer to the most-derived object.