Как получить значение по умолчанию любого типа

В C # я могу написать что-то вроде этого:

    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);

    }

Я намереваюсь написать словарь, подобный шаблонному классу, в C ++, мне бы хотелось, чтобы dict возвращал значение по умолчанию (обнуление) общего типа TVal, если данный ключ не найден. В C # спасает конструкция по умолчанию (T), в то время как в C ++ я не уверен, что является подходящим способом сделать то же самое.

Я пыталсяT obj = {} а такжеT* obj = {} с gcc4.7 работает хорошо. Я просто не уверен, что это синтаксис, определенный в спецификации языка, если этот код будет переносимым кросс-компилятором и платформой. Пожалуйста, помогите мне с моим doudt! Заранее спасибо!

PS:

~~~~~~~~~~

Чтобы убедиться, что шаблон получает значение по умолчанию (обнуление) ЛЮБОГО типа, даже из тех, у которых нет вызываемого по умолчанию ctor, я использовал следующий механизм (вдохновленный ответом 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
}

Это выглядит некрасиво, но не должно вызывать каких-либо проблем, ведь обнуляемый объект - это просто кусок пустой памяти. Я ошибся?

Ответы на вопрос(4)

Ваш ответ на вопрос