Возможно, у вас проблемы с использованием std::numeric_limits<IntType>::max()
. windows.h
заканчивается файлом minwindef.h
, который определяет неудачные макросы max
и min
. Фрагмент из minwindef.h
:
#ifndef NOMINMAX
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#endif /* NOMINMAX */
Если перед вашим настраиваемым заголовком включено windows.h
, выражение std::numeric_limits<IntType>::max()
будет расширено до std::numeric_limits<IntType>::((() > ()) ? () : ())
, что является недопустимым синтаксисом.
Существует два возможных решения:
#define NOMINMAX
до включения windows.h
- в общем, это хорошая практика, поскольку эти макросы min
/ max
(и их неоконные формы MIN
и MAX
) являются известной причиной вопросов
- включать ваш пользовательский заголовок до
windows.h
- это не лучший подход, потому что он требует от пользователей вашего пользовательского заголовка дополнительных знаний