admin管理员组文章数量:1352834
#include <unordered_map>
const std::unordered_map<int, uint8_t> Map{
{10, 5},
};
int main()
{
}
Warning Level is /W4 and I have also set "treat warnings as error" to true.
Building with MSVC compiler version 19.43.34809 I get the following error:
1>ConsoleApplication1.cpp
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): error C2220: the following warning is treated as an error
1>(compiling source file 'ConsoleApplication1.cpp')
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: 'initializing': conversion from '_Ty' to '_Ty2', possible loss of data
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: with
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: [
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: _Ty=int
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: ]
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: and
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: [
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: _Ty2=uint8_t
1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54): warning C4244: ]
1>(compiling source file 'ConsoleApplication1.cpp')
1> C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\utility(274,54):
1> the template instantiation context (the oldest one first) is
1> C:\Software\test\Test_unordered_map_uint8_t\ConsoleApplication1\ConsoleApplication1.cpp(7,5):
1> see reference to function template instantiation 'std::pair<const int,uint8_t>::pair<int,int,0>(_Other1 &&,_Other2 &&) noexcept' being compiled
1> with
1> [
1> _Other1=int,
1> _Other2=int
1> ]
1> C:\Software\test\Test_unordered_map_uint8_t\ConsoleApplication1\ConsoleApplication1.cpp(6,43):
1> see the first reference to 'std::pair<const int,uint8_t>::pair' in 'void __cdecl `dynamic initializer for 'Map''(void)'
Basically the compiler treats number 5 as int and then complains that there is data loss to converting it to uint8_t.
I have never encountered this problem before. Compiling with MingGW 11.2.0 and using "-Wall -Wextra -Wpedantic -pedantic-errors" passes.
This is the piece of utility that produces this warning:
#if _HAS_CXX23
template <class _Other1 = _Ty1, class _Other2 = _Ty2,
#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv
template <class _Other1, class _Other2,
#endif // ^^^ !_HAS_CXX23 ^^^
enable_if_t<conjunction_v<is_constructible<_Ty1, _Other1>, is_constructible<_Ty2, _Other2>>, int> = 0>
constexpr explicit(!conjunction_v<is_convertible<_Other1, _Ty1>, is_convertible<_Other2, _Ty2>>)
pair(_Other1&& _Val1, _Other2&& _Val2) noexcept(
is_nothrow_constructible_v<_Ty1, _Other1> && is_nothrow_constructible_v<_Ty2, _Other2>) // strengthened
: first(_STD forward<_Other1>(_Val1)), second(_STD forward<_Other2>(_Val2)) {
}
Am I missing something or is this MSVC bug?
本文标签: visual cMSVC compiler interprets numeric literal as int instead of uint8tStack Overflow
版权声明:本文标题:visual c++ - MSVC compiler interprets numeric literal as int instead of uint8_t - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1743899920a2558487.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论