Вы можете избежать выделения, если готовы пожертвовать умножением, используйте
outer_prod(scalar_vector<double>(1, 1), vec)
для преобразования вектора в матричное выражение. Кроме того, ваша функция, вероятно, должна быть
template<class C>
void Func(const matrix_expression<C>& in...
сама matrix_expression не моделирует концепцию матричного выражения, это просто базовый класс.