Boost logo

Boost :

Subject: Re: [boost] [1.39.0][Signals2] Release branch test failures
From: Frank Mori Hess (frank.hess_at_[hidden])
Date: 2009-04-13 15:08:58


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Monday 13 April 2009, Peter Dimov wrote:
>
> I haven't. What seems to be happening is that when you pass _1, which is
>
> inline arg<1> _1() { .. }
>
> to A1 const& a1, A1 is properly deduced as a function type, but the const
> is not dropped, as it should be; instead, the type of a1 becomes arg<1>
> (&)() const (which is illegal BTW). When this a1 is passed (by value) to
> boost::bind, it decays to its corresponding pointer type, arg<1> (*)()
> const - which is also illegal. :-)
>
> A workaround is to use pass by value instead of A1 const&.

Yes, that seems to fix it. If it is at all helpful, I've attached a more
minimal test program that triggers the bug with g++ 4.0.1 (compiles fine with
g++ 4.3.2). Changing the placeholder to be passed by value makes the compile
error go away.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAknjjc8ACgkQ5vihyNWuA4VJugCfeqgL5yxusz9WXYnIgbGnoyyW
srIAoIr19iV0HLnezajCYI/EU0uZhT56
=9OIZ
-----END PGP SIGNATURE-----

--Boundary-00=_P344Jq3pkGp1KfH
Content-Type: text/x-c++src;
  charset="iso 8859-15";
  name="bind_test.cpp"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
        filename="bind_test.cpp"

// Copyright (C) Frank Mori Hess 2009

// Use, modification and
// distribution is subject to 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)

#include <boost/bind.hpp>
#include <boost/function.hpp>

template<typename F, typename A1>
        void binder_template(const F &func,
                const A1 &arg1
// forwarding arg1 by value instead of as a const reference fixes compile error on gcc 4.0.1
// A1 arg1
        )
{
        boost::function1<int, int> x = boost::bind(func, arg1);
}

int f(int x)
{
        return x;
}

int main()
{
        binder_template(&f, _1);

  return 0;
}

--Boundary-00=_P344Jq3pkGp1KfH--


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk