Ответ 1
В контейнере value_type
имеется только несколько требований. Они зависят главным образом от контейнера, но в общем случае требования минимальны MoveConstructible
и MoveAssignable
.
Глядя на стандартные таблицы С++ 11, для которых эти требования означают, вы получите следующее:
§ 17.6.3.1 Таблица 20 (MoveConstructible
):
+----------------------------------------------------------+
| Expression | Post Condition |
|----------------------------------------------------------+
| T u = rv; | u is equivalent to the |
| | value of rv before the construction |
+----------------------------------------------------------+
| T u(rv); | T(rv) is equivalent to the |
| | value of rv before the construction |
+----------------------------------------------------------+
| rv state is unspecified. |
| |
+----------------------------------------------------------+
§ 17.6.3.1 Таблица 22 (MoveAssignable
).
+-----------+--------------+-------------+----------------------+
| Expression| Return Type | Return value| Post Condition |
|-----------|--------------|-------------|----------------------|
| t = rv; | T& | t | t is equivalent to |
| | | | the value of rv |
| | | | before the assignment|
| | | | |
+---------------------------------------------------------------+
| rv state is unspecified |
| |
+---------------------------------------------------------------+
В контейнере больше требований, предъявляемых к контейнеру, например DefaultConstructible
. Однако ни один из требований не требует operator&
, чтобы не перегружать. В основном они имеют дело с конструктивностью value_type
, а не с перегрузками оператора, предоставляемыми типом.
Вы можете найти другие таблицы в § 17.6.3.1. Требования к контейнеру указаны в § 23.