Здравствуйте, netch80, Вы писали:
N>На самом деле тут вообще ещё вопрос, при чём тут тьюринг-полнота языка на фазе трансляции, когда проверки всё равно надо впихивать в рантайм. Но если мы не сойдёмся по сказанному выше, то этот вопрос поднимать смысла нет.
Тут интереснее возможность не впихивать в рантайм избыточные проверки.
Например, при присванивании из RangeInteger<10, 20> в RangeInteger<5, 30> никакие проверки делать не надо.
В простых случаях вида RangeInteger<10, 50> a = 42; компилятору легко — после разворачивания шаблона сравнения if(42<10) будут выброшены.
А вот как отследить инварианты через границу двух разных типов?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.