#pragma once #include "../tag_list_info.hpp" namespace sprawl { template struct Tag; namespace detail { template struct SizeChecker { static_assert(t_Size <= SPRAWL_CHR_MAX, "Size of tag exceeds SPRAWL_CHR_MAX; please increase SPRAWL_CHR_MAX to a larger power of 2."); static constexpr ssize_t value = t_Size <= SPRAWL_CHR_MAX ? t_Size : SPRAWL_CHR_MAX; }; template struct IsPositive { static constexpr bool value = (t_Idx > 0); }; template struct CharIn { static constexpr bool value = (t_SearchChar == t_FirstChar ? true : CharIn::value); }; template struct CharIn { static constexpr bool value = (t_SearchChar == t_LastChar); }; template struct MeetsCondition; template struct MeetsCondition { static constexpr bool value = t_ConditionType::template Check::value ? MeetsCondition::value : false; }; template struct MeetsCondition { static constexpr bool value = t_ConditionType::template Check::value; }; template struct MeetsCondition { static constexpr bool value = false; }; template struct MeetsComplexCondition; template struct MeetsComplexCondition { static constexpr bool value = t_ConditionType::template ComplexCheck::value ? MeetsComplexCondition::value : false; }; template struct MeetsComplexCondition { static constexpr bool value = t_ConditionType::template ComplexCheck::value; }; template struct MeetsComplexCondition { static constexpr bool value = false; }; template struct TagWrapper; template struct TagWrapper<0, t_Idx, t_CharsSoFarType, true, true, t_FirstChar, t_Chars...> { typedef t_CharsSoFarType type; }; template struct TagWrapper { typedef typename t_CharsSoFarType::template AppendChar type; }; template struct TagWrapper { typedef typename TagWrapper, true, IsPositive::value, t_Chars...>::type type; }; template struct TagWrapper { typedef t_TagType type; }; template struct TagWrapper { typedef t_CharsSoFarType type; }; template struct TagWrapper { typedef typename TagWrapper::value, t_Chars...>::type type; }; template