Template Tipo de retorno com valor padrão

Então, ao escrever uma classe de modelo C ++, defini um método que retorna um objeto do tipo de modelo, da seguinte forma:

template <typename T>
class Foo
{
public:
    T GetFoo()
    {
        T value;

        //Do some stuff that might or might not set the value of 'value'

        return value;
    }
 };

int main() {

    Foo<int> foo;

    foo.GetFoo();

    return 0;
}

Isto dá o seguinte aviso:

prog.cpp: In member function ‘T Foo<T>::GetFoo() [with T = int]’:
prog.cpp:15: warning: ‘value’ is used uninitialized in this function

Entendo por que isso está acontecendo - estou retornando um @ não inicializaint como parte deGetFoo. O problema é que, se eu usasseFoo<SomeClass>, a linhaT value; inicializariavalue usando o construtor padrão deSomeClass.

Consegui suprimir este aviso, fazendo o seguinte:

    T GetFoo()
    {
        T value = T();

        //Do some stuff that might or might not set the value of 'value'

        return value;
    }

Isso parece funcionar para tipos primitivos (comoint efloat) e classes, pelo menos enquanto essa classe tiver um construtor padrão e um construtor de cópias. Minha pergunta é - essa é a maneira aceita de resolver esse problema? Existem efeitos colaterais disso que eu deveria conhecer?

questionAnswers(6)

yourAnswerToTheQuestion