标准库对自动分配有什么保证?
 C ++ 11标准对于标准库的自动分配有什么意义? 更具体一些,如果有的话,什么是selfAssign保证什么? 
 template<class T> std::vector<T> selfAssign(std::vector<T> v) { v = std::move(v); return v; } 
	
17.6.4.9函数参数[res.on.arguments]
1除非另有明确规定,否则以下各项适用于在C ++标准库中定义的函数的所有参数。
…
- 如果函数参数绑定到右值引用参数,则实现可能会假定此参数是对此参数的唯一引用。 [注意:如果参数是T &&forms的generics参数,并且typesA的左值被绑定,则参数绑定到左值引用(14.8.2.1),因此不在前面的句子中。 – 注意:如果一个程序将一个左值传递给一个xvalue,同时将该左值传递给一个库函数(例如通过用参数move(x)调用该函数),程序会有效地要求该函数处理该左值作为一个临时的。 这个实现可以自由地优化掉参数是否有价值时可能需要的别名检查。 -endnote]
 所以,允许std::vector<T, A>::operator=(vector&& other)的实现假设other是一个prvalue。 如果other是一个prvalue,自动分配是不可能的。 
什么可能发生:
  v将处于无资源状态(0容量)。 如果v已经有0容量,那么这将是一个无操作。 
更新
  最新的工作草案N4618经过修改,明确指出在移动可MoveAssignable要求中, 
 t = rv 
  (其中rv是右值),如果t和rv不引用相同的对象, t只需要是赋值之前的rv的等价值。 而且,无论在任务之后, rv的状态都是未指定的。 有一个额外的说明进一步澄清: 
rv必须仍然符合使用它的库组件的要求,无论t和rv是否指向同一个对象。
 什么也不会发生。 如果&other == this一个聪明的赋值操作符可能会立即返回。 否则,它将把内部分配给自己,什么都不做。