|
@@ -1,20 +1,6 @@ |
|
|
/*!
|
|
|
/*!
|
|
|
* \file typelist.h
|
|
|
* \file typelist.h
|
|
|
* \brief A template parameter "container"
|
|
|
* \brief A template parameter "container"
|
|
|
*
|
|
|
|
|
|
* \copyright
|
|
|
|
|
|
* Copyright (C) 2018 Christos Choutouridis <christos@choutouridis.net>\n
|
|
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
|
|
* it under the terms of the GNU Lesser General Public License as
|
|
|
|
|
|
* published by the Free Software Foundation, either version 3
|
|
|
|
|
|
* of the License, or (at your option) any later version.\n
|
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
|
* GNU Lesser General Public License for more details.\n
|
|
|
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
*/
|
|
|
#ifndef __utl_meta_typelist_h__
|
|
|
#ifndef __utl_meta_typelist_h__
|
|
|
#define __utl_meta_typelist_h__
|
|
|
#define __utl_meta_typelist_h__
|
|
@@ -26,7 +12,7 @@ |
|
|
#include <utl/meta/sfinae.h>
|
|
|
#include <utl/meta/sfinae.h>
|
|
|
/*!
|
|
|
/*!
|
|
|
* \ingroup meta
|
|
|
* \ingroup meta
|
|
|
* \defgroup typelist
|
|
|
|
|
|
|
|
|
* \defgroup typelist typelist
|
|
|
*/
|
|
|
*/
|
|
|
//! @{
|
|
|
//! @{
|
|
|
|
|
|
|
|
@@ -37,7 +23,7 @@ namespace meta { |
|
|
* \brief
|
|
|
* \brief
|
|
|
* A class template that just holds a parameter pack.
|
|
|
* A class template that just holds a parameter pack.
|
|
|
*
|
|
|
*
|
|
|
* The idea came from MPL's sequence concept \ref link1 and from N4115 \ref link2.
|
|
|
|
|
|
|
|
|
* The idea came from MPL's sequence concept [1] and from N4115 [2].
|
|
|
* In addition to N4115's name "packer" we just prefer a name which is an object, not a subject.
|
|
|
* In addition to N4115's name "packer" we just prefer a name which is an object, not a subject.
|
|
|
* This way the name gives the feeling of a container and smells like Python.\n
|
|
|
* This way the name gives the feeling of a container and smells like Python.\n
|
|
|
*
|
|
|
*
|
|
@@ -51,15 +37,15 @@ namespace meta { |
|
|
* l1 a {};
|
|
|
* l1 a {};
|
|
|
* \endcode
|
|
|
* \endcode
|
|
|
*
|
|
|
*
|
|
|
* boost::hana \ref link3 suggests a more powerful scheme were type invariant structures can be used
|
|
|
|
|
|
|
|
|
* boost::hana [3] suggests a more powerful scheme were type invariant structures can be used
|
|
|
* for metaprograming also. This lib does not need (yet) this kind of power (we afraid the
|
|
|
* for metaprograming also. This lib does not need (yet) this kind of power (we afraid the
|
|
|
* responsibility that comes along).\n
|
|
|
* responsibility that comes along).\n
|
|
|
* So a simple python-like list with some extra vector-like
|
|
|
* So a simple python-like list with some extra vector-like
|
|
|
* element access functionalities and no iterators is good enough(for now).
|
|
|
* element access functionalities and no iterators is good enough(for now).
|
|
|
*
|
|
|
*
|
|
|
* \anchor link1 https://www.boost.org/doc/ \n
|
|
|
|
|
|
* \anchor link2 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4115.html \n
|
|
|
|
|
|
* \anchor link3 https://github.com/boostorg/hana \n
|
|
|
|
|
|
|
|
|
* [1]: https://www.boost.org/doc/ \n
|
|
|
|
|
|
* [2]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4115.html \n
|
|
|
|
|
|
* [3]: https://github.com/boostorg/hana \n
|
|
|
*/
|
|
|
*/
|
|
|
template <typename... Ts>
|
|
|
template <typename... Ts>
|
|
|
struct typelist {
|
|
|
struct typelist {
|
|
|