Murkt> В С можно переопределить операцию разыменования указателя?
В С ничего нельзя переопределить. А в С++ — свободно. Как smart pointers делаются-то? В С++ нельзя переопределить 4 операции — те, которые выполняются статически. Выдержка из стандарта:
[quote]
13.5 Overloaded operators [over.oper]
1 A function declaration having one of the following operator-function-ids as its name declares an operator function. An operator function is said to implement the operator named in its operator-function-id.
operator-function-id:
operator
operator
operator
operator < template-argument-listopt > operator: one of
new delete new[] delete[]
+ - * / % ˆ & | ˜
= < > += -= = /= %=
ˆ= &= |= << >> >>= <<= == !=
<= >= && || ++ — , -> ->
() []
[
Note: the last two operators are function call (5.2.2) and subscripting (5.2.1). The operators new[], delete[], (), and [] are formed from more than one token. ]
2 Both the unary and binary forms of
+ - * &
can be overloaded.
3
The following operators cannot be overloaded:
. .* :: ?:
nor can the preprocessing symbols # and ## (clause 16).
[/quote]
Murkt> Я поразмышляю над этим.
Приятно, что заставил задуматься.
Murkt> У них разный приоритет? Если да, то подходит и проблем не вызывает 
Нет, в С++ приоритет не разный — там его нельзя заменять.
4 Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual expressions, and the order in which side effects take place, is unspecified.53)
53) The precedence of operators is not directly specified, but it can be derived from the syntax.
It is not possible to change the precedence, grouping, or number of operands of operators.
Кстати, а знал ли ты про такие операторы языка С++, Как
Pointer-to-member operators — .* и ->* ?