Допустим у нас есть код:
struct MyStruct { MyStruct() = default; template <typename T> MyStruct &operator=(const T&) { std::cout << "template copy assignment\n"; return *this; } template <typename T> MyStruct(const T&) { std::cout << "template copy ctor\n"; } }; int main() { MyStruct c1; MyStruct c2 = c1; c1 = c2; }На экран, как не странно, не будет выведено ничего. В предыдущем посте я писал о том, что если определить оператор копирующего присваивания или конструктор копирования, то компилятор не генерирует оператор копирующего/перемещающего присваивания и конструктор копирования/перемещения. Но подобное правило не работает для шаблонных функций, поэтому компилятор сгенерировал все версии специальных функций по-умолчанию.
Комментариев нет:
Отправить комментарий