error: 'INT32_MAX' was not declared in this scope

Hm... All I needed to do was #include <climits> nothing else on this page worked for me.

Granted, I was trying to use INT_MIN.


Quoted from the man page, "C++ implementations should define these macros only when __STDC_LIMIT_MACROS is defined before <stdint.h> is included".

So try:

#define __STDC_LIMIT_MACROS
#include <stdint.h>

 #include <cstdint> //or <stdint.h>
 #include <limits>

 std::numeric_limits<std::int32_t>::max();

Note that <cstdint> is a C++11 header and <stdint.h> is a C header, included for compatibility with C standard library.

Following code works, since C++11.

#include <iostream>
#include <limits>
#include <cstdint>

struct X 
{ 
    static constexpr std::int32_t i = std::numeric_limits<std::int32_t>::max(); 
};

int main()
{
    switch(std::numeric_limits<std::int32_t>::max()) { 
       case std::numeric_limits<std::int32_t>::max():
           std::cout << "this code works thanks to constexpr\n";
           break;
    }
    return EXIT_SUCCESS;
}

http://coliru.stacked-crooked.com/a/4a33984ede3f2f7e

Tags:

C++