Я вижу один из двух вариантов.Во-первых, создать версию, которая принимает значение.Часто раздражает, когда функция все равно не работает со значениями.Все, что вам нужно, - это простая оболочка:
pure M inverse(M)(const ref M m){ /* ... */ }
pure M inverse(M)(const M m){ inverse(m); }
Будьте осторожны, если совпадение параметров совпадает, иначе вы получите бесконечную рекурсию.
Однако лучшерешение будет использовать auto ref
.Это то, для чего он был создан.
pure M inverse(M)(const auto ref M m){ /* ... */ }
Затем компилятор будет использовать ref
, когда это уместно, и не-1011 *, когда это уместно, и вам не придется об этом беспокоиться.