#include <iostream>
#include "Set.hpp" /* template <unsigned int i, unsigned int ...set> struct MexSearch { static constexpr unsigned int value = (IsMemberInSet<i, set...>::is_member) ? MexSearch<i+1, set...>::value : i; }; */ template <unsigned int i, unsigned int ...set> struct MexSearch; template <unsigned int i, bool found, unsigned int ...set> struct MexSelect; template <unsigned int i, unsigned int ...set> struct MexSelect<i, true, set...> { static constexpr unsigned int value = MexSearch<i+1, set...>::value; }; template <unsigned int i, unsigned int ...set> struct MexSelect<i, false, set...> { static constexpr unsigned int value = i; }; template <unsigned int i, unsigned int ...set> struct MexSearch { static constexpr bool found = IsMemberInSet<i, set...>::is_member; static constexpr unsigned int value = MexSelect<i, found, set...>::value; }; template <unsigned int ...set> struct Mex { static constexpr unsigned int value = MexSearch<0, set...>::value; }; int main() { std::cout << IsMemberInSet<2, 0, 1, 2, 3>::is_member << std::endl; std::cout << IsMemberInSet<2>::is_member << std::endl; std::cout << "Mex<2, 1, 0, 2, 5>::value = " << Mex<2, 1, 0, 2, 5>::value << std::endl; } |