Шаблонные функции: построение по умолчанию без копирования-построения в C ++

Учитывая

struct C { 
   C()            { printf("C::C()\n"          ); }
   C(int)         { printf("C::C(int)\n"       ); }
   C( const C& )  { printf("copy-constructed\n"); }
};

И шаблонную функцию

template< typename T > void foo(){
    // default-construct a temporary variable of type T
    // this is what the question is about.
    T t1;       // will be uninitialized for e.g. int, float, ...
    T t2 = T(); // will call default constructor, then copy constructor... :(
    T t3();     // deception: this is a local function declaration :(
}

int main(){
    foo<int>();
    foo<C  >();
}

Если посмотреть на t1 , она не будет инициализирована, когда T , например, int ]. С другой стороны, t2 будет скопировано из созданного по умолчанию временной.

Вопрос: возможно ли в C ++ сконструировать универсальную переменную по умолчанию, кроме with template-fu?

6
задан xtofl 14 March 2011 в 19:05
поделиться