Ваша функция должна принимать const std::string&
, чтобы вы могли использовать ее таким образом.
C ++ имеет правило, согласно которому значение rvalue (в вашем случае временное std::string
, которое создается из строкового литерала) может быть связано с константной ссылкой, но не с неконстантной ссылкой.
Насколько мне известно, это ограничение не связано с какой-либо фундаментальной проблемой реализации, поскольку временные значения могут быть изменены другими способами. Но предполагается, что функция, которая принимает неконстантную ссылку, делает это, потому что ее основная цель состоит в том, чтобы изменить этот аргумент. Обычно не имеет смысла делать это с временным, так что, возможно, запрет на него ловит ошибки гораздо больше, чем мешает людям делать что-то стоящее. В любом случае, не все значения являются временными: некоторые являются литералами, которые действительно нельзя изменить.
Если вы не можете изменить функцию AddNodeValue, то вы можете обойти ее:
std::string valstr("modvalue");
document.AddNodeValue(modvalue, valstr);
// valstr might have changed, check the documentation of AddNodeValue