8#ifndef PXR_BASE_TF_META_H
9#define PXR_BASE_TF_META_H
19PXR_NAMESPACE_OPEN_SCOPE
22template <
class... Args>
struct TfMetaList {};
25template<
template <
class...>
class Cls,
class List>
26struct Tf_MetaApplyImpl;
28template<
template <
class...>
class Cls,
class... Args>
29struct Tf_MetaApplyImpl<Cls, TfMetaList<Args...>>
31 using Type = Cls<Args...>;
35template <
template <
class...>
class Cls,
class TypeList>
36using TfMetaApply =
typename Tf_MetaApplyImpl<Cls, TypeList>::Type;
39template <
class Head,
class...>
40using TfMetaHead = Head;
43template <
class Head,
class... Tail>
44using TfMetaTail = TfMetaList<Tail...>;
49using TfMetaDecay = TfMetaList<std::decay_t<Ts>...>;
54using TfMetaLength = std::integral_constant<size_t,
sizeof...(Xs)>;
57template <
bool Condition>
58struct Tf_ConditionalImpl {
59 template <
class T,
class>
64struct Tf_ConditionalImpl<false> {
65 template <
class,
class F>
71template <
bool Cond,
class T,
class F>
72using TfConditionalType =
73 typename Tf_ConditionalImpl<Cond>::template Type<T, F>;
75PXR_NAMESPACE_CLOSE_SCOPE