Создает ли следующий аргумент по умолчанию для шаблона экземпляр шаблона с типом EmptyClass
?
class EmptyClass{};
template <typename TYPE=EmptyClass>
class Sample
{
public:
static void test()
{
TYPE::Serialize();
}
};
Нет, в этом коде создается любой экземпляр EmptyClass. Сериализация — это статическая функция. И конструктор EmptyClass никогда не вызывается (в показанном коде)
Нет. Шаблоны создаются при использовании и создаются для каждой функции.
Значения параметров по умолчанию — это только те типы, которые используются, когда параметр не указан. Но сами по себе не подразумевают использование.
Когда вы звоните Sample<>::test()
затем Sample<Emptyclass>::test()
создается и EmptyClass::serialize()
попытка вызова, приводящая к ошибке времени компиляции (так как Emptyclass
объявлен как не имеющий такой функции)
Попробуйте создать больше функций, содержащих разные ошибки времени компиляции, относящиеся к разным параметрам, и вы увидите, как до тех пор, пока функция не используется, ошибка не возникает.