25#ifndef PXR_BASE_TF_META_H
26#define PXR_BASE_TF_META_H
36PXR_NAMESPACE_OPEN_SCOPE
39template <
class... Args>
struct TfMetaList {};
42template<
template <
class...>
class Cls,
class List>
43struct Tf_MetaApplyImpl;
45template<
template <
class...>
class Cls,
class... Args>
46struct Tf_MetaApplyImpl<Cls, TfMetaList<Args...>>
48 using Type = Cls<Args...>;
52template <
template <
class...>
class Cls,
class TypeList>
53using TfMetaApply =
typename Tf_MetaApplyImpl<Cls, TypeList>::Type;
56template <
class Head,
class...>
57using TfMetaHead = Head;
60template <
class Head,
class... Tail>
61using TfMetaTail = TfMetaList<Tail...>;
66using TfMetaDecay = TfMetaList<std::decay_t<Ts>...>;
71using TfMetaLength = std::integral_constant<size_t,
sizeof...(Xs)>;
73PXR_NAMESPACE_CLOSE_SCOPE