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)>;
56PXR_NAMESPACE_CLOSE_SCOPE