, я не понимаю следующее поведение:
#include <memory>
template <int Index, typename Type>
struct position {
using value_type = Type;
template <typename TT>
constexpr position( TT& val )
: value{ val }
{
}
static constexpr int index = Index;
Type & value;
};
int main()
{
constexpr double d = 3.14;
constexpr auto p1=position<3, const double>(d).value; // ok
constexpr auto p2=position<3, const double>(d); // error
}
почему position<3, double>(3.14).value
может быть константным выражением, а position<3, double>( 3.14 )
- нет?
Я понимаю, что компилятор хотел бы, чтобы элемент данных "position :: value" был константной ссылкой, но почему, не является ли ссылка литеральным типом?