- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Greetings,
my env: MSVC 2012, both ICC 13 (the latest updates) and 14 (beta, the latest updates), Win8 x64
I was trying to convert WIN API CreateThread to make my C++11 code more cross-platform. I replaced it by inclusion of header <thread> and adjusted my code to use its functionality.
Sadly, I am unable to reproduce compile error with simple test case.
Errors I get are as follows:
[cpp]
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(24): error : identifier "intmax_t" is undefined
template<intmax_t _Val>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(27): error : identifier "intmax_t" is undefined
static const intmax_t value = _Val < 0 ? -_Val : _Val;
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(31): error : identifier "intmax_t" is undefined
template<intmax_t _Ax,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(32): error : identifier "intmax_t" is undefined
intmax_t _Bx>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(35): error : identifier "intmax_t" is undefined
static const intmax_t value = _GcdX<_Bx, _Ax % _Bx>::value;
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(38): error : identifier "intmax_t" is undefined
template<intmax_t _Ax>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(38): error : constant "_Ax" is not used in or cannot be deduced from the template argument list of class template "std::_GcdX<<error-constant>, <error-constant>>"
template<intmax_t _Ax>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(44): error : identifier "intmax_t" is undefined
template<intmax_t _Ax,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(45): error : identifier "intmax_t" is undefined
intmax_t _Bx>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(48): error : identifier "intmax_t" is undefined
static const intmax_t value =
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(53): error : identifier "intmax_t" is undefined
template<intmax_t _Nx, intmax_t _Dx = 1>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(53): error : identifier "intmax_t" is undefined
template<intmax_t _Nx, intmax_t _Dx = 1>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(64): error : identifier "intmax_t" is undefined
static const intmax_t num =
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(70): error : identifier "intmax_t" is undefined
static const intmax_t den =
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(74): error : expression must have a constant value
typedef ratio<num, den> type;
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(74): error : expression must have a constant value
typedef ratio<num, den> type;
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(78): error : identifier "intmax_t" is undefined
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(79): error : identifier "intmax_t" is undefined
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(80): error : identifier "intmax_t" is undefined
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(81): error : identifier "intmax_t" is undefined
intmax_t _D2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(82): error : identifier "intmax_t" is undefined
intmax_t _Gx>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(106): error : identifier "intmax_t" is undefined
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(107): error : identifier "intmax_t" is undefined
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(108): error : identifier "intmax_t" is undefined
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(109): error : identifier "intmax_t" is undefined
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(106): error : constant "_N1" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_add2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(107): error : constant "_D1" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_add2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(108): error : constant "_N2" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_add2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(109): error : constant "_D2" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_add2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(130): error : identifier "intmax_t" is undefined
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(131): error : identifier "intmax_t" is undefined
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(132): error : identifier "intmax_t" is undefined
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(133): error : identifier "intmax_t" is undefined
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(130): error : constant "_N1" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_subtract2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(131): error : constant "_D1" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_subtract2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(132): error : constant "_N2" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_subtract2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(133): error : constant "_D2" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_subtract2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(150): error : identifier "intmax_t" is undefined
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(151): error : identifier "intmax_t" is undefined
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(152): error : identifier "intmax_t" is undefined
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(153): error : identifier "intmax_t" is undefined
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(171): error : identifier "intmax_t" is undefined
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(172): error : identifier "intmax_t" is undefined
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(173): error : identifier "intmax_t" is undefined
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(174): error : identifier "intmax_t" is undefined
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(171): error : constant "_N1" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_multiply2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(172): error : constant "_D1" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_multiply2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(173): error : constant "_N2" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_multiply2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(174): error : constant "_D2" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_multiply2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(196): error : identifier "intmax_t" is undefined
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(197): error : identifier "intmax_t" is undefined
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(198): error : identifier "intmax_t" is undefined
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(199): error : identifier "intmax_t" is undefined
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(196): error : constant "_N1" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_divide2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(197): error : constant "_D1" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_divide2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(198): error : constant "_N2" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_divide2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(199): error : constant "_D2" is not used in or cannot be deduced from the template argument list of class template "std::_Ratio_divide2<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(224): error : identifier "intmax_t" is undefined
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(225): error : identifier "intmax_t" is undefined
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(226): error : identifier "intmax_t" is undefined
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(227): error : identifier "intmax_t" is undefined
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(224): error : constant "_N1" is not used in or cannot be deduced from the template argument list of class template "std::ratio_equal<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(225): error : constant "_D1" is not used in or cannot be deduced from the template argument list of class template "std::ratio_equal<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(226): error : constant "_N2" is not used in or cannot be deduced from the template argument list of class template "std::ratio_equal<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(227): error : constant "_D2" is not used in or cannot be deduced from the template argument list of class template "std::ratio_equal<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(246): error : identifier "intmax_t" is undefined
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(247): error : identifier "intmax_t" is undefined
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(248): error : identifier "intmax_t" is undefined
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(249): error : identifier "intmax_t" is undefined
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(246): error : constant "_N1" is not used in or cannot be deduced from the template argument list of class template "std::ratio_less<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
template<intmax_t _N1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(247): error : constant "_D1" is not used in or cannot be deduced from the template argument list of class template "std::ratio_less<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(248): error : constant "_N2" is not used in or cannot be deduced from the template argument list of class template "std::ratio_less<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _N2,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(249): error : constant "_D2" is not used in or cannot be deduced from the template argument list of class template "std::ratio_less<std::ratio<<error-constant>, <error-constant>>, std::ratio<<error-constant>, <error-constant>>>"
intmax_t _D2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono(55): error : identifier "intmax_t" is undefined
template<intmax_t _R1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono(56): error : identifier "intmax_t" is undefined
intmax_t _R2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono(55): error : constant "_R1" is not used in or cannot be deduced from the template argument list of class template "std::chrono::_Is_ratio<std::ratio<<error-constant>, <error-constant>>>"
template<intmax_t _R1,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono(56): error : constant "_R2" is not used in or cannot be deduced from the template argument list of class template "std::chrono::_Is_ratio<std::ratio<<error-constant>, <error-constant>>>"
intmax_t _R2>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono(302): error : identifier "intmax_t" is undefined
template<intmax_t _Ax,
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono(303): error : identifier "intmax_t" is undefined
intmax_t _Bx>
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono(306): error : identifier "intmax_t" is undefined
static const intmax_t _Gx = _Gcd<_Ax, _Bx>::value;
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono(307): error : identifier "intmax_t" is undefined
static const intmax_t value = (_Ax / _Gx) * _Bx;
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ratio(188): error : incomplete type is not allowed
typedef typename _Ratio_multiply2<_R1, _R2>::type type;
^
detected during instantiation of class "std::ratio_multiply<_R1, _R2> [with _R1=std::ratio<<error-constant>, <error-constant>>, _R2=std::nano]" at line 697 of "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\chrono"
Build FAILED.
[/cpp]
When I remove "#include <thread>" from pre-compiled header file, these errors disappear, and it compiles just fine.
Any suggestions?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Sergey,
Yes, I did it before your post.
My #include's looks like:
[cpp]
#include <cstdint>
#include <stdint.h>
#include <thread>
[/cpp]
(and after all "using namespace std;").
and I am getting the very same compile errors. Am I missing something? Or is it a bug in MSVC/ICC?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
As Sergey points out, every one of those errors is a result of "intmax_t" not being a defined type. Likely, the WinAPI header you were using for threads contained an include for the definition of that type, and when you stopped using it this error popped up and was incorrectly attributed to threading.
Your test case for this error is: (compiles correctly in the lastest update of 13.x on Linux)
[cpp]
#include <stdint.h>
// including <cstdint> also works
int main()
{
intmax_t test;
return 0;
}
[/cpp]
If you omit stdint.h, this testcase emits the error in your OP.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Greetings,
finally I have figured out what was causing the problem. One of 3rd party library had it's own "stdint.h" and it was getting higher precedence with #include than standard library's one.
I have adjusted the 3rd party library and called the file "my_stdint.h" and everything is just fine now.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page