Menu

#15 Windows.h defines min and max macro which conflicts with std::numeric_limits<T>::min/max

Unstable_(example)
accepted
nobody
None
1
2013-01-05
2013-01-04
Anonymous
No

This simple patch solved this problem.

1 Attachments

Discussion

  • Artyom Beilis

    Artyom Beilis - 2013-01-04

    Use NOMINMAX define before you include windows.h

    I would not apply such workarounds.

     
  • Artyom Beilis

    Artyom Beilis - 2013-01-04
    • status: open --> wont-fix
     
  • Mingun

    Mingun - 2013-01-05

    (Это мое Issue, когда создавал, забыл войти. Извините, что на русском, но ведь вроде разработчик из России)
    Проблема в том, что не собирается сама библиотека на MSVC 2008 без этого патча. Вместо того, чтобы искать, кто где включает этот злополучный windows.h проще сделать маленький фикс, разве нет? Похоже, меня не правильно поняли. Ошибка возникает при компиляции самой библиотеки, а не при ее использовании. Следовательно, это проблема библиотеки, которую надо как-то решать. Предлагаемое решение -- кроссплатформенное и надежное, к грязным хакам не относится. Что же еще надо?

     
  • Mingun

    Mingun - 2013-01-05

    (Это мое Issue, когда создавал, забыл войти. Извините, что на русском, но ведь вроде разработчик из России)
    Проблема в том, что не собирается сама библиотека на MSVC 2008 без этого патча. Вместо того, чтобы искать, кто где включает этот злополучный windows.h проще сделать маленький фикс, разве нет? Похоже, меня не правильно поняли. Ошибка возникает при компиляции самой библиотеки, а не при ее использовании. Следовательно, это проблема библиотеки, которую надо как-то решать. Предлагаемое решение -- кроссплатформенное и надежное, к грязным хакам не относится. Что же еще надо?

     
  • Mingun

    Mingun - 2013-01-05

    (Это мое Issue, когда создавал, забыл войти. Извините, что на русском, но ведь вроде разработчик из России)
    Проблема в том, что не собирается сама библиотека на MSVC 2008 без этого патча. Вместо того, чтобы искать, кто где включает этот злополучный windows.h проще сделать маленький фикс, разве нет? Похоже, меня не правильно поняли. Ошибка возникает при компиляции самой библиотеки, а не при ее использовании. Следовательно, это проблема библиотеки, которую надо как-то решать. Предлагаемое решение -- кроссплатформенное и надежное, к грязным хакам не относится. Что же еще надо?

     
  • Mingun

    Mingun - 2013-01-05

    Простите, сайт заглючил, удалить не дают.

     
  • Artyom Beilis

    Artyom Beilis - 2013-01-05

    First of all I'm not Russian developer, so I'd prefer to have bugs documentation in English.

    From what I understand you can't build the library. Can you please provide an error log so I can see in what file it fails.

    I'll add NOMINMAX in required place and it will fix the build issue (this is the correct way to handle the code).

    The min/max macros should not be used as they are not standard and may hurt in many places. If windows.h is included NOMINMAX must be defined.

    So please paste the location where the build fails.

    (What is strange that I managed to build it under Windows with MSVC9 without problems) so I need the reference where problem happens

     
  • Artyom Beilis

    Artyom Beilis - 2013-01-05
    • status: wont-fix --> accepted
     
  • Mingun

    Mingun - 2013-01-05

    Now tested on MSVC 2012.
    Compilation log:

    Microsoft (R) Program Maintenance Utility Version 11.00.50522.1
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    [  3%] Building CXX object CMakeFiles/cppdb.dir/drivers/mysql_backend.cpp.obj
    mysql_backend.cpp
    <...skip warnings C4275 and C4251...>
    D:\Projects\database\cppdb\cppdb/numeric_util.h(50) : warning C4003: not enough actual parameters for macro 'max'
    D:\Projects\database\cppdb\cppdb/numeric_util.h(50) : warning C4003: not enough actual parameters for macro 'min'
    <...skip warnings C4275 and C4251...>
    D:\Projects\database\cppdb\cppdb/numeric_util.h(50) : error C2589: '(' : illegal token on right side of '::'
            D:\Projects\database\cppdb\drivers\mysql_backend.cpp(119) : see reference to function template instantiation 'Tcppdb::parse_number<T>(const std::string &,std::istringstream &)' being compiled
            with
            [
                T=short
            ]
            D:\Projects\database\cppdb\drivers\mysql_backend.cpp(124) : see reference to function template instantiation 'bool cppdb::mysql_backend::unprep::result::do_fetch<short>(int,T &)' being compiled
            with
            [
                T=short
            ]
    D:\Projects\database\cppdb\cppdb/numeric_util.h(50) : error C2059: syntax error : '::'
    D:\Projects\database\cppdb\cppdb/numeric_util.h(61) : fatal error C1903: unable to recover from previous error(s); stopping compilation
    NMAKE : fatal error U1077: 'D:\71D4~1\50F3~1\MICROS~1.0\VC\bin\amd64\cl.exe' : return code '0x2'
    Stop.
    NMAKE : fatal error U1077: '"D:\Полезности\Программы\Microsoft Visual Studio 11.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
    Stop.
    NMAKE : fatal error U1077: '"D:\Полезности\Программы\Microsoft Visual Studio 11.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
    Stop.
    

    Compiler version (MSVC 2012):

    Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50522.1 for x64
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
     

Anonymous
Anonymous

Add attachments
Cancel