g++ -c -I/usr/local/boost_1_53_0/include TestFunctionCompleteness.cpp
g++ -c --std=c++0x -I/usr/local/boost_1_53_0/include
TestFunctionCompleteness.cpp
I am having trouble typedef-ing a lockfree::queue with boost::function as
the element for a ThreadPool class I am writing.
TestJobQueue1 below compiles fine while TestJobQueue2 compile fails. I am
using gcc 4.7.2 and boost_1_53_0.
void doSomething() {
std::cout << "Called doSomething\n";
}
typedef boost::function FunctionType;
class TestJobQueue1 {
public:
typedef std::vector<FunctionType> FunctionArray;
TestJobQueue1() {
std::cout << sizeof(FunctionType) << std::endl;
FunctionType f(&doSomething);
FunctionArray funcArray;
funcArray.push_back(f);
std::cout << funcArray.size() << std::endl;
}
};
class TestJobQueue2 {
public:
typedef boost::lockfree::queue<FunctionType> QueueType;
TestJobQueue2() {
std::cout << sizeof(FunctionType) << std::endl;
FunctionType f(&doSomething);
QueueType funcQueue;
funcQueue.push(f);
}
};
produces:
In file included from TestFunctionCompleteness.cpp:11:0:
/usr/local/boost_1_53_0/include/boost/lockfree/queue.hpp: In instantiation
of ‘class boost::lockfree::queue >’:
TestFunctionCompleteness.cpp:42:17: required from here
/usr/local/boost_1_53_0/include/boost/lockfree/queue.hpp:79:1: error:
invalid application of ‘sizeof’ to incomplete type
‘boost::STATIC_ASSERTION_FAILURE<false>’
/usr/local/boost_1_53_0/include/boost/lockfree/queue.hpp:83:1: error:
invalid application of ‘sizeof’ to incomplete type
‘boost::STATIC_ASSERTION_FAILURE<false>’
produces:
In file included from TestFunctionCompleteness.cpp:11:0:
/usr/local/boost_1_53_0/include/boost/lockfree/queue.hpp: In instantiation
of ‘class boost::lockfree::queue >’:
TestFunctionCompleteness.cpp:42:17: required from here
/usr/local/boost_1_53_0/include/boost/lockfree/queue.hpp:79:5: error:
static assertion failed: (boost::has_trivial_destructor<T>::value)
/usr/local/boost_1_53_0/include/boost/lockfree/queue.hpp:83:5: error:
static assertion failed: (boost::has_trivial_assign<T>::value)
Is boost::function somehow an incomplete type and not expected to work in
boost::lockfree::queue or is this a bug in the queue implementation? Can
anyone suggest a simple workaround?
Thank you,
Ryan Fogarty