Я пытаюсь понять некоторые случаи использования ключевого слова delete в C ++ 11.
Поэтому я попытался удалить специализацию шаблона класса c, удалив его конструктор в методе main.
Вот мой код:
using namespace std;
template <typename T>
class ComplexNumber
{
T x;
T y;
public:
ComplexNumber(T a, T b) : x(a) , y(b) {}
void display() { std::cout<<x << " + i"<<y<<std::endl; }
};
int main()
{
ComplexNumber(char a, char b) = delete;
ComplexNumber<int> obj1(1,2);
ComplexNumber<double> obj2(1.0,2.0);
ComplexNumber<char> obj3('1' , '2');
return 0;
}
Но выполнение программы не блокируется в «ComplexNumber obj3 ('1', '2')", как ожидалось, а в строке «ComplexNumber (char a, char b) = delete».
Вот ошибки » trace:
main.cpp: In function ‘int main()’:
main.cpp:28:18: error: missing template arguments before ‘(’ token
ComplexNumber(char a, char b) = delete;
^
main.cpp:28:19: error: expected primary-expression before ‘char’
ComplexNumber(char a, char b) = delete;
^~~~
main.cpp:28:27: error: expected primary-expression before ‘char’
ComplexNumber(char a, char b) = delete;
^~~~
main.cpp:28:43: error: expected primary-expression before ‘;’ token
ComplexNumber(char a, char b) = delete;
Не могли бы вы помочь понять, почему мы не можем удалить указанный c конструктор "для типа char" здесь?