2024-10-14 17:15:14 +02:00
|
|
|
////
|
|
|
|
|
Copyright 2024 Joaquin M Lopez Munoz
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
////
|
|
|
|
|
|
|
|
|
|
[#lambda]
|
2024-10-14 19:34:55 +03:00
|
|
|
# Lambda Expressions, <boost/mp11/lambda.hpp>
|
2024-10-14 17:15:14 +02:00
|
|
|
:toc:
|
|
|
|
|
:toc-title:
|
|
|
|
|
:idprefix:
|
|
|
|
|
|
|
|
|
|
## mp_lambda<T>
|
|
|
|
|
|
|
|
|
|
template<class T> using mp_lambda = /*...*/;
|
|
|
|
|
|
|
|
|
|
`mp_lambda<T>` is a quoted metafunction whose nested template `fn<U...>`
|
|
|
|
|
returns a type `V` with the same syntactic definition as `T`, except
|
|
|
|
|
that occurrences of placeholders in `T` are replaced by the corresponding
|
|
|
|
|
element of `U...`.
|
|
|
|
|
|
|
|
|
|
For example, `mp_lambda<std::pair<_1, _2*>>::fn<int, char>` is `std::pair<int, char*>`.
|
|
|
|
|
|
|
|
|
|
Replacement does not happen inside those constituent parts of `T` resulting
|
|
|
|
|
from the instantiation of a class template with non-type template parameters.
|
|
|
|
|
|
|
|
|
|
NOTE: In GCC 4.8, a compiler bug results in `const` and `volatile` qualifiers
|
|
|
|
|
being stripped from the returned type `V` (except when they are applied to
|
|
|
|
|
function or member function types).
|
|
|
|
|
|
|
|
|
|
NOTE: `mp_lambda` is not supported in VS2013 and prior due to compiler limitations.
|