[/ / Copyright 2017 Peter Dimov / / Distributed under the Boost Software License, Version 1.0. (See / accompanying file LICENSE_1_0.txt or copy at / http://www.boost.org/LICENSE_1_0.txt) /] [section Overview] Mp11 is a C++11 metaprogramming library based on template aliases and variadic templates. It implements the approach outlined in the article [@http://pdimov.com/cpp2/simple_cxx11_metaprogramming.html Simple C++11 metaprogramming] and [@http://pdimov.com/cpp2/simple_cxx11_metaprogramming_2.html its sequel]. Reading these articles before proceeding with this documentation is highly recommended. The general principles upon which Mp11 is built are that algorithms and metafunctions are template aliases of the form `F` and data structures are lists of the form `L`, with the library placing no requirements on `L`. `mp_list` is the built-in list type, but `std::tuple`, `std::pair` and `std::variant` are also perfectly legitimate list types, although of course `std::pair`, due to having exactly two elements, is not resizeable and will consequently not work with algorithms that need to add or remove elements. Another distinguishing feature of this approach is that lists (`L`) have the same form as metafunctions (`F`) and can therefore be used as such. For example, applying `std::add_pointer_t` to the list `std::tuple` by way of `mp_transform>` gives us `std::tuple`, but we can also apply `mp_list` to the same tuple: using R = mp_transform>; and get `std::tuple, mp_list>`. [endsect]