|
Boost Users : |
Subject: [Boost-users] Boost.Function and Boost.Bind
From: Yang Zhang (yanghatespam_at_[hidden])
Date: 2008-11-20 04:40:15
I have the following simple test case:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <iostream>
using namespace boost;
using namespace std;
void show(int x) { cout << x << endl; }
void twice(function0<void> f) { f(); f(); }
int main() {
// This works...
function<void()> f = bind(show, 0);
bind(twice, f)();
// ...but this does not compile.
// bind(twice, bind(show, 0))();
return 0;
}
When uncommenting the problematic line and attempting to build, I get:
$ g++ -Wall -o boost_function{,.cc}
/opt/armed/include/boost/bind.hpp: In member function void
boost::_bi::list1<A1>::operator()(boost::_bi::type<void>, F&, A&, int)
[with F = void (*)(boost::function0<void,
std::allocator<boost::function_base> >), A = boost::_bi::list0, A1 =
boost::_bi::bind_t<void, void (*)(int),
boost::_bi::list1<boost::_bi::value<int> > >]:
/opt/armed/include/boost/bind/bind_template.hpp:20: instantiated from
typename boost::_bi::result_traits<R, F>::type boost::_bi::bind_t<R, F,
L>::operator()() [with R = void, F = void (*)(boost::function0<void,
std::allocator<boost::function_base> >), L =
boost::_bi::list1<boost::_bi::bind_t<void, void (*)(int),
boost::_bi::list1<boost::_bi::value<int> > > >]
boost_function.cc:13: instantiated from here
/opt/armed/include/boost/bind.hpp:232: error: conversion from void to
non-scalar type boost::function0<void,
std::allocator<boost::function_base> > requested
Why can't I put the two on the same line? (I also tried using
template<typename T> void twice(T f) { f(); f() }, but that didn't work
either.) Thanks in advance for any tips.
-- Yang Zhang http://www.mit.edu/~y_z/
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net