Очевидно, что есть способ определить, является ли выражение rvalue или lvalue в C ++ 03 (очевидно, я говорю, потому что я не уверен, насколько хорошо я понимаю технику).Обратите внимание, что для того, чтобы использовать эту технику, макросы препроцессора в значительной степени необходимы.Эрик Ниблер написал прекрасную статью о том, как это работает и как он используется в BOOST_FOREACH:
Обратите внимание, чтостатья довольно тяжело читается (по крайней мере, для меня);как говорит в ней Neibler:
Нет сомнений в том, что это загадочные вещи, но мы вознаграждены надежным способом обнаружить rvalue-ness и lvalue-ness любого выражения.
Использование обнаружения rvalue, описанного в artcile, может помочь вам решить, по крайней мере, некоторые из проблем, которые решают ссылки на rvalue в C ++ 0x.