Академический вопрос.
Можно ли создать такой компилятор, чтобы он проверял бинарные отношения переопределенных операторов на уровне компиляции, то есть пишем требование рефлексивности:
public static reflexive bool operator ==(A a, A b)
{
return a.x<b.x;
}
и код не компилируется потому, что reflexive требует истинности (a==a)
аналогично требование симметричности:
symmetric (a==b) == (b==a)
ну и далее: транзитивности, антисимметричности (для строгих неравенств) и проч.