Хм ... Я еще не думал об этой функции. Ваш образец был хорошо продуман и, безусловно, интересен. C ++ очень мощный, как сейчас, но, к сожалению, синтаксис, используемый в фрагментах кода, который вы читаете, временами чрезмерно сложный. Читаемость, если не все, то, по крайней мере, много. И такая функция была бы приспособлена для большей удобочитаемости. Если я возьму ваш последний пример
assert(1_kg == 2.2_lb); // give or take 0.00462262 pounds
... Интересно, как вы это выразите сегодня. У вас будет класс KG и LB, и вы бы сравнили неявные объекты:
assert(KG(1.0f) == LB(2.2f));
И это тоже будет. С типами, у которых есть более длинные имена или типы, на которые у вас нет надежды иметь такой красивый конструктор для написания адаптера без него, это может быть хорошим дополнением к созданию и инициализации неявного объекта «на лету». С другой стороны, вы уже можете создавать и инициализировать объекты с помощью методов.
Но я согласен с Нилсом в математике. Функции тригонометрии C и C ++, например, требуют ввода в радианах. Я думаю, что в степенях, поэтому очень короткое неявное преобразование, такое как Nils, было очень приятным.
В конечном счете, это будет синтаксический сахар, но это будет иметь небольшое влияние на читаемость. И, вероятно, будет легче написать некоторые выражения тоже (sin (180.0deg) легче написать, чем sin (deg (180.0)). И тогда будут люди, которые злоупотребляют концепцией. Но тогда люди, злоупотребляющие языком, должны использовать очень ограничительные языки, а не что-то такое выразительное, как C ++.
Ах, в моем сообщении говорится в основном ничего, кроме: все будет хорошо, удар не будет слишком большим. Давайте не будем волноваться.: -)