#pragma once /* Copyright (c) 2017 Stanislaw Halik * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. */ #include template using cv_qualified = std::conditional_t>, std::decay_t, const t&>; #define progn(...) (([&]() { __VA_ARGS__ })()) #define prog1(x, ...) (([&]() { auto _ret1324 = (x); do { __VA_ARGS__; } while (0); return _ret1324; })()) #define once_only(...) do { static bool once__ = false; if (!once__) { once__ = true; __VA_ARGS__; } } while(false) #if 0 #include #include namespace meta { namespace detail { template struct reverse_; template class x, typename... ys> struct reverse_, x> { using type = typename reverse_, x>::type; }; template class x, typename... ys> struct reverse_, x> { using type = x; }; template class inst, typename x> struct lift_; template class inst, template class x, typename... xs> struct lift_> { using type = inst; }; template struct index_sequence_ { using part = std::integral_constant; using type = typename index_sequence_::type; }; template struct index_sequence_ { using type = std::tuple; }; } // ns detail template using reverse = typename detail::reverse_, std::tuple<>>::type; template class inst, class x> using lift = typename detail::lift_::type; template using first = x; template using rest = std::tuple; template using butlast = reverse>>; template using last = lift>; template using index_sequence = typename detail::index_sequence_::type; } // ns meta #endif