[ 2011-07-11: Daniel comments and suggests wording changes ]
Further, according to paragraph 18 of the same sub-clause:
basic_string(const basic_string& str, const Allocator& alloc); basic_string(basic_string&& str, const Allocator& alloc);[…]
-18- Throws: The second form throws nothing if alloc == str.get_allocator() unless the copy constructor for Allocator throws.
The constraint "unless the copy constructor for Allocator throws" is redundant, because according to Table 28 — Allocator requirements, the expressions
X a1(a); X a(b);
impose the requirement: "Shall not exit via an exception".