Because the type deduction rules for auto deduce to an object type. You are copy initializing a new int from the one referenced by b.
That's by design. We want to create new objects without explicitly specifying their type. And more often than not, it's a new object that is a copy some other object. Had it deduced to a reference, it would defeat the intended purpose.
If you want the deduced type to be a reference when the initializer is a reference, then that is accomplished with a placeholder of decltype(auto):
decltype(auto) d = b; // d and b now refer to the same object d = 15; // And this will error because the cv-qualifiers are the same as b's