«неоцененный операнд» заменяет «является операндом оператора sizeof (5.3.3) или является операндом оператора typeid, и выражение не обозначает lvalue типа полиморфного класса (5.2.8)». Он имеет ту же основную цель, но не пытается перечислить все случаи в стандарте операторов C ++ 0x, операнды которого не оцениваются. Например, decltype
является новым.
"odr-used" заменяет "used", я полагаю, они полагали, что само по себе "used" может быть неоднозначным с другими использованиями слова "use" в стандарте. В обоих случаях, однако, он определяет смысл «используется», который имеет отношение к ODR.
Так что это на самом деле не изменения, просто обновленные формулировки для C ++ 0x.
Это изменение:
Переменная или не перегруженная функция
чье имя появляется как
потенциально оцениваемое выражение
odr-используется, если это не объект
что удовлетворяет требованиям для
появляются в постоянном выражении
(5.19) и lvalue-to-rvalue
преобразование (4.1) немедленно
приложенное.
против
Объект или не перегружен
функция используется, если появляется ее имя
в потенциально оцененных
выражение.
Предположим, a
- это static const int
в глобальном масштабе. Тогда в C ++ 03 это не используется в следующем выражении:
char x[a];
потому что контекст требует константного выражения. Тем не менее, он используется в следующих случаях:
void foo(int); foo(a);
потому что контекст не требует постоянного выражения.
В C ++ 0x a
не odr используется в любом случае. Допускается использование константного выражения, и при вызове функции преобразование lvalue-rvalue применяется немедленно (поскольку foo
принимает свой параметр по значению, а не по ссылке). Таким образом, оно соответствует критериям «если», которых нет в C ++ 03.
Существует также разница в определении «потенциально оцениваемого». В первом примере char x[a]
, a
потенциально оценивается в C ++ 03, но не в C ++ 0x. Я не проверял, использует ли что-либо еще в стандарте «потенциально оцененный», на что может повлиять это изменение. Если здесь упоминается только то, что эта часть не является изменением, просто исключение перемещено из «потенциально оцененного» в «использованный».