Как уже говорили другие, это законно , но опасно . Есть много ловушек, в которые вы можете попасть. Например, предположим, что вы определили пользовательский оператор преобразования между C<T>
и T. Затем вы говорите
C<object> c = new C<object>("hello");
object o = (object) c;
Что происходит? выполняется пользовательское преобразование или нет? Нет, потому что c уже является объектом.
Как я уже сказал, есть сумасшедшие ситуации, в которые вы можете попасть, когда пытаетесь определить универсальные операторы преобразования; не делайте этого, если у вас нет глубокого и детального понимания раздела 10.10.3 спецификации.