forked from boostorg/bind
Ported bind documentation to BoostBook
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
[/
|
||||
/ Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
|
||||
/ Copyright (c) 2003-2008 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:limitations Limitations]
|
||||
|
||||
As a general rule, the function objects generated by `bind` take their
|
||||
arguments by reference and cannot, therefore, accept non-const temporaries or
|
||||
literal constants. This is an inherent limitation of the C++ language in its
|
||||
current (2003) incarnation, known as the [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm forwarding problem].
|
||||
(It will be fixed in the next standard, usually called C++0x.)
|
||||
|
||||
The library uses signatures of the form
|
||||
|
||||
template<class T> void f(T & t);
|
||||
|
||||
to accept arguments of arbitrary types and pass them on unmodified. As noted,
|
||||
this does not work with non-const r-values.
|
||||
|
||||
On compilers that support partial ordering of function templates, a possible
|
||||
solution is to add an overload:
|
||||
|
||||
template<class T> void f(T & t);
|
||||
template<class T> void f(T const & t);
|
||||
|
||||
Unfortunately, this requires providing 512 overloads for nine arguments, which
|
||||
is impractical. The library chooses a small subset: for up to two arguments,
|
||||
it provides the const overloads in full, for arities of three and more it
|
||||
provides a single additional overload with all of the arguments taken by const
|
||||
reference. This covers a reasonable portion of the use cases.
|
||||
|
||||
[endsect]
|
||||
Reference in New Issue
Block a user