Well, if nothing else, I'm learning lots about the corners of the
language!
I've got the following testcase:
#include
#include <iostream>
template<typename Base>
class Handle {
public:
typedef boost::shared_ptr<Base> type;
};
template<typename Type>
void print_shared_ptr(boost::shared_ptr<Type> ptr)
{
std::cout << "Value is " << *ptr << std::endl;
}
template<typename Type>
void print_handle(typename Handle<Type>::type ptr)
{
std::cout << "Value is " << *ptr << std::endl;
}
int main(void)
{
Handle<int>::type iptr(new int(10));
print_shared_ptr(iptr);
print_handle<int>(iptr);
print_handle(iptr);
return(0);
}
The calls to print_shared_ptr and the first print_handle resolve just
fine but the compiler (g++ 4.0.2) can't seem to resolve the final call
to print_handle:
shared_ptr.cc: In function 'int main()':
shared_ptr.cc:29: error: no matching function for call to
'print_handle(boost::shared_ptr<int>&)'
The point of class Handle is to hide the implementation detail
that boost::shared_ptr is being used to manage resources. I
would like the ability to easily change the type of smart
pointer used throughout the application.
What's going on here? Is there a way to make this work without
having to explicitly specify the type to print_handle?
Thanks.
-Dave