Вы не можете изменить поведение встроенных типов. Вы не можете нарушать язык таким образом, как если бы вы не могли перегрузить новый operator+
для int
s, который делает что-то еще.
Язык должен быть в состоянии дать определенные базовые гарантии, чтобы можно было писать библиотеки, основанные на базовом поведении!
Вы можете преобразовать любой тип в пользовательский тип, предоставив конструктор, который можно вызывать с одним аргументом, например ::
struct Foo
{
Foo(T const &);
// ...
};
Теперь вы можете сказать, T x; Foo y = x;
и т. Д.
Вы также можете сделать обратное и предоставить преобразования из вашего класса:
struct Foo
{
operator S() const;
// ...
};
Теперь вы также можете сказать, S s = y;
.