Cómo obtener el valor predeterminado de cualquier tipo

En C # puedo escribir algo como esto:

    class AnyThing<T>
    {
        static public T Default = default(T);
    }

    static void Main ()
    {
        int i = AnyThing<int>.Default;
        Console.WriteLine (i==0);
        string s = AnyThing<string>.Default;
        Console.WriteLine (s == null);

    }

Tengo la intención de escribir un diccionario como una clase de plantilla en C ++, me gustaría que el dictador devuelva el valor predeterminado (cero) del tipo genérico TVal si no se encuentra la clave dada. En C #, la construcción por defecto (T) viene a rescatar, mientras que en C ++ no estoy seguro de cuál es la forma adecuada de hacer lo mismo.

He intentadoT obj = {} yT* obj = {} Con gcc4.7, funciona bien. Simplemente no estoy seguro de si es la sintaxis definida por la especificación del idioma, si este código de código será de compiladores y plataformas cruzadas portátiles. ¡Por favor ayúdame con mi esfuerzo! ¡Gracias por adelantado!

PD:

~~~~~~~~~~

Para asegurarme de que la plantilla obtenga el valor predeterminado (cero) de CUALQUIER tipo, incluso de aquellos que no tienen ctor predeterminado que se pueda llamar, empleé el siguiente mecanismo (inspirado en la respuesta de avakar):

template<class T>
struct AnyThing
{
    static const T& Default ;
private:
    static const char temp[sizeof(T)];
};

template<class T> const char AnyThing<T>::temp[] = {};
template<class T> const T& AnyThing<T>::Default =  *(T*)temp;

struct st
{
    double data;
    st()=delete;
};

int main()
{
    cout << (int)AnyThing<char*>::Default<<endl;    //0
    cout << AnyThing<int>::Default<<endl;       //0
    cout <<AnyThing<st>::Default.data<<endl;        //0
}

Parece feo, pero no debería causar ningún problema, después de todo, un objeto a cero es solo una parte de la memoria en blanco. ¿Me equivoco?

Respuestas a la pregunta(4)

Su respuesta a la pregunta