Topic: std::bind2nd for function taking reference?
Author: Thomas Maeder <maeder@glue.ch>
  Date: 2000/01/13 Raw View
Scott Meyers schrieb:
>
> > The binder2nd constructor (=A720.3.6.3) takes its second argument by
> > reference, which isn't possible if the base type is a reference (or
> > pointer) already.
>
> I don't see why a pointer would be a problem.  There's nothing wrong with
> a reference to a pointer.
You are right.
So the original question is reduced to methods taking a reference.
---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://reality.sgi.com/austern_mti/std-c++/faq.html              ]
Author: smeyers@aristeia.com (Scott Meyers)
  Date: 2000/01/07 Raw View
On 20 Dec 99 14:16:09 GMT, Thomas Maeder wrote:
> The binder2nd constructor (=A720.3.6.3) takes its second argument by
> reference, which isn't possible if the base type is a reference (or
> pointer) already.
I don't see why a pointer would be a problem.  There's nothing wrong with a
reference to a pointer.
Scott
--
Scott Meyers, Ph.D.                  smeyers@aristeia.com
Software Development Consultant      http://www.aristeia.com/
Visit http://meyerscd.awl.com/ to demo the Effective C++ CD
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://reality.sgi.com/austern_mti/std-c++/faq.html              ]
Author: Thomas Maeder <maeder@glue.ch>
  Date: 1999/12/20 Raw View
The following program compiles:
#include <functional>
void foo(int,int) { }
int main()
{
 int s =3D 0;
 std::bind2nd(std::ptr_fun(&foo),s);
}
This, however, doesn't
#include <functional>
void foo(int,int&) { }
int main()
{
 int s =3D 0;
 std::bind2nd(std::ptr_fun(&foo),s);
}
The binder2nd constructor (=A720.3.6.3) takes its second argument by
reference, which isn't possible if the base type is a reference (or
pointer) already.
If I add
namespace std
{
  template <class S, class T, class A>=20
  class ptr_fun1ref_t : public binary_function<T,A,S>
  {
    S (*pf)(T,A&);
  public:
    explicit ptr_fun1ref_t(S (*p)(T,A&)) : pf(p) {}
    S operator()(T p, A &a) const { return (*pf)(p,a); }
  };
  template <class S, class T, class A>=20
  inline ptr_fun1ref_t<S,T,A> ptr_fun(S (*pf)(T,A&))
  {
    return ptr_fun1ref_t<S,T,A>(pf);
  }
}
(knowing that I'm not allowed to do that), the above program compiles
again.
Is this a defect in the Standard C++ Library to me, or was it deliberatel=
y
left out because it's not needed for the library itself?
---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://reality.sgi.com/austern_mti/std-c++/faq.html              ]