Согласно C++ Primer, оператор со стрелкой C++ дает значение lvalue. Дополнительно decltype
выражения, которое дает значение lval, приведет к эталонному типу. Итак, почему следующий тип decltype не приводит к ссылочному типу.Тип стрелки C++ дает значение lvalue
struct MyStruct {
string name
};
MyStruct s;
s.name = "aname";
MyStruct* p = &s;
decltype (p -> name) str = s.name; //type of str will be string and not &string although p -> name yields an lvalue
См. Http://en.cppreference.com/w/cpp/language/decltype. – Holt