Скорее всего, что-то внутри iostream
прямо или косвенно включает какой-то другой заголовок, определяющий std::min
и std::max
. (Возможно, был включен сам algorithm
. Возможно, какой-то внутренний заголовок, который используется для реализации вашей стандартной библиотеки C++.)
Не следует полагаться на такое поведение. Включите algorithm
, если вы хотите использовать std::min и std::max.
Если вы привыкли к языку с модульной системой, в которой модули могут импортировать другие модули и не должны экспортировать что-либо из своего импорта (например, модульная система Racket), такое поведение может сбивать с толку.
Напомним, однако, что #include выполняет текстовую замену. Когда строка #include обрабатывается, она удаляется из файла .cpp и заменяется содержимым файла, на который она указывала.
У большинства компиляторов есть возможность выводить результаты работы препроцессора, чтобы вы могли отследить, что в том числе и что. В своем комментарии к ответу kmort вы сказали, что используете Visual Studio Express. Командная строка для предварительной обработки файла в файл использование компилятора Visual C++ — это cl /P foo.cpp
. Используя этот вывод, мы можем обнаружить, что определение std::max
исходит из заголовка xutility
, специфичного для реализации. (Размещение курсора внутри текста «std: max» и нажатие F12 в Visual Studio еще быстрее. :-])
kmort также упомянул компилятор /showIncludes
. выключатель. Используя это, мы можем легко отследить цепочку включения. Вот уменьшенный результат моего прогона.
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\iostream
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\istream
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ostream
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ios
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xlocnum
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\streambuf
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xiosbase
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xlocale
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\stdexcept
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstring
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xmemory0
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xutility
person
chwarr
schedule
11.11.2013
std
версииmin
иmax
? Попробуйте дать им полную квалификацию. - person paddy   schedule 11.11.2013iostream
включает в себяalgorithm
, но не стоит рассчитывать на такое поведение. - person Retired Ninja   schedule 11.11.2013