19 #include <type_traits> 24 template<
typename DesiredType,
typename CurrentType>
27 return unique_ptr<DesiredType>(
static_cast<DesiredType*
>(currentPointer.release()));
30 template<
typename DesiredType,
typename CurrentType>
33 return unique_ptr<DesiredType>(
dynamic_cast<DesiredType*
>(currentPointer.release()));
36 template<
typename DesiredType,
typename CurrentType>
39 return unique_ptr<DesiredType>(
const_cast<DesiredType*
>(currentPointer.release()));
47 #define VC2012 170050727 48 #define VC2012_NOVEMBER_CTP 170051025 49 #define VC2012_UPDATE1 170051106 50 #define VC2012_UPDATE2 170060315 55 #if _MSC_FULL_VER >= VC2012 56 #define TTVSDK_EMPLACE_BACK_SUPPORTED 63 #if _MSC_FULL_VER == VC2012_NOVEMBER_CTP || _MSC_VER >= 1800 64 #define TTVSDK_VARIADIC_TEMPLATES_SUPPORTED 67 #elif defined(__GNUC__) 69 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) 70 #define TTVSDK_VARIADIC_TEMPLATES_SUPPORTED 76 #if defined(TTVSDK_VARIADIC_TEMPLATES_SUPPORTED) 81 template<
typename PointedAtType,
typename... ParameterTypes>
82 inline typename std::enable_if<!std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
85 return std::unique_ptr<PointedAtType>(
new PointedAtType(std::forward<ParameterTypes>(parameters)...));
89 template<
typename Po
intedAtType>
90 inline typename std::enable_if<std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
93 typedef typename std::remove_extent<PointedAtType>::type ElementType;
94 return std::unique_ptr<PointedAtType>(
new ElementType[ElementCount]);
98 #else // defined TTVSDK_VARIADIC_TEMPLATES_SUPPORTED 103 template<
typename Po
intedAtType>
104 inline typename std::enable_if<!std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
107 return std::unique_ptr<PointedAtType>(
new PointedAtType());
110 template<
typename Po
intedAtType,
typename Parameter1Type>
111 inline typename std::enable_if<!std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
114 return std::unique_ptr<PointedAtType>(
new PointedAtType(std::forward<Parameter1Type>(parameter1)));
117 template<
typename Po
intedAtType,
typename Parameter1Type,
typename Parameter2Type>
118 inline typename std::enable_if<!std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
119 make_unique(Parameter1Type&& parameter1, Parameter2Type&& parameter2)
121 return std::unique_ptr<PointedAtType>(
new PointedAtType(std::forward<Parameter1Type>(parameter1), std::forward<Parameter2Type>(parameter2)));
124 template<
typename Po
intedAtType,
typename Parameter1Type,
typename Parameter2Type,
typename Parameter3Type>
125 inline typename std::enable_if<!std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
126 make_unique(Parameter1Type && parameter1, Parameter2Type && parameter2, Parameter3Type && parameter3)
128 return std::unique_ptr<PointedAtType>(
new PointedAtType(std::forward<Parameter1Type>(parameter1), std::forward<Parameter2Type>(parameter2), std::forward<Parameter3Type>(parameter3)));
131 template<
typename Po
intedAtType,
typename Parameter1Type,
typename Parameter2Type,
typename Parameter3Type,
typename Parameter4Type>
132 inline typename std::enable_if<!std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
133 make_unique(Parameter1Type && parameter1, Parameter2Type && parameter2, Parameter3Type && parameter3, Parameter4Type && parameter4)
135 return std::unique_ptr<PointedAtType>(
new PointedAtType(std::forward<Parameter1Type>(parameter1), std::forward<Parameter2Type>(parameter2), std::forward<Parameter3Type>(parameter3), std::forward<Parameter4Type>(parameter4)));
138 template<
typename Po
intedAtType,
typename Parameter1Type,
typename Parameter2Type,
typename Parameter3Type,
typename Parameter4Type,
typename Parameter5Type>
139 inline typename std::enable_if<!std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
140 make_unique(Parameter1Type && parameter1, Parameter2Type && parameter2, Parameter3Type && parameter3, Parameter4Type && parameter4, Parameter5Type && parameter5)
142 return std::unique_ptr<PointedAtType>(
new PointedAtType(std::forward<Parameter1Type>(parameter1), std::forward<Parameter2Type>(parameter2), std::forward<Parameter3Type>(parameter3), std::forward<Parameter4Type>(parameter4), std::forward<Parameter5Type>(parameter5)));
146 template<
typename Po
intedAtType>
147 inline typename std::enable_if<std::is_array<PointedAtType>::value, std::unique_ptr<PointedAtType>>::type
150 typedef typename std::remove_extent<PointedAtType>::type ElementType;
151 return std::unique_ptr<PointedAtType>(
new ElementType[ElementCount]);
155 #endif // ! defined TTVSDK_VARIADIC_TEMPLATES_SUPPORTED Definition: cpp11transition.h:22
std::enable_if<!std::is_array< PointedAtType >::value, std::unique_ptr< PointedAtType > >::type make_unique()
Definition: cpp11transition.h:105
unique_ptr< DesiredType > dynamic_pointer_cast(unique_ptr< CurrentType > &¤tPointer)
Definition: cpp11transition.h:31
unique_ptr< DesiredType > const_pointer_cast(unique_ptr< CurrentType > &¤tPointer)
Definition: cpp11transition.h:37
unique_ptr< DesiredType > static_pointer_cast(unique_ptr< CurrentType > &¤tPointer)
Definition: cpp11transition.h:25