tqdm/tqdm.cpp

Constexpr redeclaration

StylishTriangles opened this issue · 2 comments

This breaks my build so much. Please don't redeclare C++ keywords like that.

#define constexpr static const

/usr/include/c++/8/bits/algorithmfwd.h:370:5: error: redeclaration ‘const _Tp& std::max(const _Tp&, const _Tp&)’ differs in ‘constexpr’ from previous declaration
     max(const _Tp&, const _Tp&);
     ^~~
In file included from /usr/include/c++/8/bits/char_traits.h:39,
                 from /usr/include/c++/8/string:40,
                 from /usr/include/c++/8/stdexcept:39,
                 from /usr/include/c++/8/system_error:41,
                 from /usr/include/c++/8/bits/fs_fwd.h:35,
                 from /usr/include/c++/8/filesystem:36,
                 from orion/raytracer.cpp:1:
/usr/include/c++/8/bits/stl_algobase.h:219:5: note: previous declaration ‘constexpr const _Tp& std::max(const _Tp&, const _Tp&)’
     max(const _Tp& __a, const _Tp& __b)
     ^~~
In file included from /usr/include/c++/8/bits/stl_algo.h:60,
                 from /usr/include/c++/8/algorithm:62,
                 from /usr/local/include/assimp/matrix3x3.inl:54,
                 from /usr/local/include/assimp/types.h:515,
                 from /usr/local/include/assimp/Importer.hpp:55,
                 from ./orion/model.hpp:7,
                 from ./orion/raytracer.hpp:9,
                 from orion/raytracer.cpp:7:

I'd like to say that there is more than constexpr. explicit and noexcept are also redefined.

#ifndef constexpr
#define constexpr static const
#endif

#ifndef explicit
#define explicit
#endif

#ifndef noexcept
#define noexcept
#endif

I see this library is not really maintained, but let me leave some comments for anyone who finds this and needs to fix it for themselves. #ifdef constexpr most likely doesn't work, I don't know a compiler that defines this keyword as macros. constexpr semantics couldn't be expressed in C++ without direct compiler support, it wouldn't make sense anyway.

To properly test for C++11 features, check value of __cplusplus macro (since noexcept has no feature test macro associated):

#if __cplusplus < 201103L
#define constexpr const static
#define noexcept
//nothing for explicit, it has been in the language since C++98
#endif