I have a problem relating to template functions and threads:
template <class TYPE_size>
void Threader(TYPE_size counter)
{
counter++;
}
int main()
{
unsigned int counter = 100;
thread one(Threader,counter);
one.join();
cout << counter;
}
This does not compile; I get:
error: no matching function for call to
âstd::thread::thread(, unsigned
int&)â
If I remove the template it compiles and if I change the function call to a standard function call rather than a thread (still using the template) it compiles.
Does anyone know why this is?
I’m using Centos5 64 bit.
error: no matching function for call to âstd::thread::thread(<unresolved overloaded function type>, unsigned int&)â
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.0/../../../../include/c++/4.4.0/thread:124: note: candidates are: std::thread::thread(std::thread&&)
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.0/../../../../include/c++/4.4.0/thread:122: note: std::thread::thread(const std::thread&)
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.0/../../../../include/c++/4.4.0/thread:121: note: std::thread::thread()
There is no function named Threader. When you write
Threader<int>or something, then the compiler creates a function. If you then writeThreader<float>, then the compiler creates a new function. You can either provide a default template parameter, or give it a parameter when you call it.or