Update documentation

This commit is contained in:
Peter Dimov 2021-10-18 21:33:52 +03:00
parent 0572e42219
commit 2ff3fef3d1
3 changed files with 30 additions and 0 deletions

View File

@ -9,6 +9,7 @@ Peter Dimov
:toc: left :toc: left
:toclevels: 4 :toclevels: 4
:idprefix: :idprefix:
:listing-caption: Code Example
:docinfo: private-footer :docinfo: private-footer
:leveloffset: +1 :leveloffset: +1

View File

@ -13,3 +13,4 @@ https://www.boost.org/LICENSE_1_0.txt
* Added special cases in `operator<<` and `operator>>` when * Added special cases in `operator<<` and `operator>>` when
the first argument is a stream, to allow `std::cout << _1`. the first argument is a stream, to allow `std::cout << _1`.
* Added `operator\->*`. * Added `operator\->*`.
* Added `first`, `second`.

View File

@ -90,6 +90,11 @@ template<class A, class B> auto operator>>=( A && a, B && b );
template<class A, class B> auto operator->*( A && a, B && b ); template<class A, class B> auto operator->*( A && a, B && b );
// projections
inline constexpr /unspecified/ first{};
inline constexpr /unspecified/ second{};
} // namespace lambda2 } // namespace lambda2
} // namespace boost } // namespace boost
``` ```
@ -405,3 +410,26 @@ Returns: :: `std::bind( std::forward<B>(b), std::forward<A>(a) );`
Notes: :: This operator is intended to be used with "projection" function Notes: :: This operator is intended to be used with "projection" function
objects such as member pointers or member functions taking zero arguments, objects such as member pointers or member functions taking zero arguments,
as in `_1\->*&X::m` or `_1\->*&X::f`. as in `_1\->*&X::m` or `_1\->*&X::f`.
### Projections
```
inline constexpr /unspecified/ first{};
```
A function object such that `first(x)` returns `std::get<0>(x)`.
```
inline constexpr /unspecified/ second{};
```
A function object such that `second(x)` returns `std::get<1>(x)`.
.Using first and second to print out a map
```
void print( std::map<int, std::string> const & m )
{
using namespace boost::lambda2;
std::for_each( m.begin(), m.end(), std::cout << _1->*first << ": " << _1->*second << '\n' );
}
```