Допустим у нас есть код:
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;
}
На экран, как не странно, не будет выведено ничего. В предыдущем посте я писал о том, что если определить оператор копирующего присваивания или конструктор копирования, то компилятор не генерирует оператор копирующего/перемещающего присваивания и конструктор копирования/перемещения. Но подобное правило не работает для шаблонных функций, поэтому компилятор сгенерировал все версии специальных функций по-умолчанию.
Комментариев нет:
Отправить комментарий