Ответ 1
FDIS (n3290), в Приложении C, "Совместимость", C.2.7 говорит:
17.6.3.2
E ff ect по оригинальной функции: обмен по функциям перемещен в разное header
Обоснование: удалить зависимость от <algorithm> для обмена.
E ff ect on оригинальная функция: действительный код С++ 2003, который был скомпилирован, ожидая swap, чтобы быть в < алгоритме > возможно, придется включать <utility> .
Так что нет, это не гарантируется, чтобы скомпилировать, это намеренно является нарушением изменений. Независимо от того, будут ли отдельные реализации фактически нарушать код С++ 03, это другое дело. Как вы указываете, достаточно легко для них не делать этого, определяя swap
через любой заголовок. Но есть выбор между тем, чтобы упростить перенос кода С++ 03 на С++ 0x, и помогая людям писать строго соответствующие С++ 0x.