[/ / 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 Definitions] A /list/ is a '''—''' possibly but not necessarily variadic '''—''' template class whose parameters are all types, for example `mp_list`, `mp_list<>`, `std::tuple`, `std::pair`, `std::shared_ptr`. A /metafunction/ is a class template or a template alias whose parameters are all types, for example `std::add_pointer_t`, `std::is_const`, `mp_second`, `mp_push_front`, `mp_list`, `std::tuple`, `std::pair`, `std::shared_ptr`, or template using F1 = void; template using F2 = T*; template using F3 = std::integral_constant; A /quoted metafunction/ is a class with a public metafunction called `fn`, for example struct Q1 { template using fn = void; }; struct Q2 { template using fn = T*; }; struct Q3 { template using fn = std::integral_constant; }; An /integral constant type/ is a class with a public member `value` that is an integral constant in the C++ sense. For example, `std::integral_constant`, or struct N { static int constexpr value = 2; }; [endsect]