Как правило, decltype
сохраняет константу:
const int ci = 0;
decltype(ci) x; // x is const int
x = 5; // error--x is const
class Gadget{}:
const Gadget makeCG(); // factory
decltype(makeCG()) y1, y2; // y1 and y2 are const Gadgets
y1 = y2; // error--y1 is const
Но для возвращаемых типов const
, которые возвращают фундаментальные типы, decltype
, похоже, отбрасывает const
:
const int makeCI(); // factory
decltype(makeCI()) z; // z is NOT const
z = 5; // okay
Почему decltype
отказывается от константности в этом случае? Я имею в виду два вопроса:
- Какая часть стандарта определяет такое поведение?
- Какова мотивация для определения поведения таким образом?
Спасибо.