|
Boost Users : |
From: David A. Greene (greened_at_[hidden])
Date: 2006-01-27 21:40:38
The following single-file testcase fails to link:
#include <boost/thread/thread.hpp>
#include <boost/thread/recursive_mutex.hpp>
#include <iostream>
template<typename Type>
class singleton {
public:
typedef boost::recursive_mutex mutex_type;
typedef Type * handle;
private:
typedef mutex_type::scoped_lock lock_type;
static mutex_type mutex;
static handle inst;
public:
static Type &instance(void) {
lock_type lock(mutex);
if (!inst) {
inst = new Type;
}
return(*inst);
};
};
class tester {
public:
void test(void) { std::cerr << "Test" << std::endl; };
};
template<> singleton<tester>::mutex_type singleton<tester>::mutex;
template<> singleton<tester>::handle singleton<tester>::inst = 0;
int main(void)
{
singleton<tester>::instance().test();
return(0);
}
thread.o: In function
`singleton<tester>::instance()':/home/greened/projects/apsim/current/apsim/msim/test/thread.cc:21:
undefined reference to `singleton<tester>::mutex'
collect2: ld returned 1 exit status
I was getting undefined references to "inst" before I added the
initializer. Is this a new adherance to the standard by g++ 4.0.2?
I didn't used to have to add the initializer to get it to link.
This is troublesome with boost::recursive_mutex because it is
noncopyable. How do I specify an initializer for it? Is it
just not possible to have a mutex static member?
-Dave
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