Я знаю, что есть темы, похожие на это уже (например, this).
Пример, приведенный в этом разделе, был следующим:
std::string & rs1 = std::string();
Ясно, что std::string() является значением r. Однако, мой вопрос в том, почему s1 является законным, а s2 не является?
const std::string& s1 = "String literal";
std::string& s2 = "String literal";
В стандарте четко указано, что строковые литералы являются lvalues (что понятно, поскольку они являются технически const char * за кулисами). Когда я скомпилирую s2, я получаю следующее:
prog.cpp:4:19: error: invalid initialization of non-const reference of type
'std::string& {aka std::basic_string<char>&}' from an rvalue of type
'const char*' std::string& s2 = "String literal";
Я понимаю, что стандартное определение lvalues и rvalues является взаимоисключающим, так это потенциально ошибка с компилятором? Я использую gcc 4.9.2 в этом примере. Будет ли это также одним из случаев, когда литерал действительно является значением xvalue?