// // immer: immutable data structures for C++ // Copyright (C) 2016, 2017, 2018 Juan Pedro Bolivar Puente // // This software is distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE or copy at http://boost.org/LICENSE_1_0.txt // #pragma once namespace scm { namespace detail { struct none_t; template struct pack {}; template struct pack_size; template struct pack_size> { static constexpr auto value = sizeof...(Ts); }; template constexpr auto pack_size_v = pack_size::value; template struct pack_last { using type = none_t; }; template struct pack_last> : pack_last> {}; template struct pack_last> { using type = T; }; template using pack_last_t = typename pack_last::type; } // namespace detail } // namespace scm