So in writing a C++ template class, I have defined a method that returns an object of the templated type, as such:
template class Foo { public
Boost addresses this problem in one of its utility template classes, namely boost::value_initialized and its relatives.