Будет ли std :: swap по-прежнему определяться включением алгоритма в C ++ 0x? - PullRequest
11 голосов
/ 11 августа 2011

Шаблон функции swap был перемещен с <algorithm> на <utility> в C ++ 0x.Включает ли первое последнее в C ++ 0x?Или они оба включают общий заголовок, который определяет swap?

Другими словами, гарантированно ли следующий код компилируется в C ++ 0x?

#include <algorithm>   // will this pull in std::swap?

// ...

using std::swap;
swap(a, b);

1 Ответ

15 голосов
/ 11 августа 2011

FDIS (n3290) в Приложении C, «Совместимость», C.2.7 гласит:

17.6.3.2

Влияние на исходную функцию: своп функции перемещен вРазличный заголовок

Обоснование: Удалить зависимость от для подкачки.

Влияние на исходную функцию: допустимый код C ++ 2003, который был скомпилирован, ожидая, что подкачка будет в , может потребоваться вместо этогоinclude .

Так что нет, компиляция не гарантируется, это намеренно серьезное изменение.Будут ли отдельные реализации нарушать код C ++ 03 - другой вопрос.Как вы указали, для них достаточно просто не определять, определяя swap через любой заголовок.Но есть выбор между упрощением переноса кода C ++ 03 на C ++ 0x и помогением людям писать строго соответствующий C ++ 0x.

...