I hope this helps . 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.
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
How to set a variable to constant defined using "const" keyword?
I wish this helpful for you Using the const type qualifier doesn't make something a constant. A constant in C has its own definition. See § 6.7.3 ¶ 6 of the C11 standard for a description of the const keyword: