Use static_cast to convert the expr, instead of auto substitution.

struct X {
  using auto = double&;
  ...
};

auto x = X{};
// gets tranformed into
auto x = static_cast<double&>(X{});
// as opposed to:
double &x = X{};