matplotplusplus
matplotplusplus copied to clipboard
c++ 20 Compile error
Bug category
- [x] bug - compilation error
- [ ] bug - compilation warning
- [ ] bug - runtime error
- [ ] bug - runtime warning
- [ ] bug - logic error
Describe the bug
c++ 20 unsupport value u8 string to std::string https://stackoverflow.com/questions/56833000/c20-with-u8-char8-t-and-stdstring
Steps to Reproduce
bazel --output_user_root="./.cache" build ^
--cxxopt="/std:c++20" ^
--verbose_failures ^
//playground:window
Output external/matplotplusplus/source/matplot/core/line_spec.cpp(76): error C2679: binary '=': no operator found which takes a right-hand operand of type 'const char8_t [6]' (or there is no acceptable conversion)
ERROR: C:/users/liuzichao/desktop/cg/.cache/in4szefe/external/matplotplusplus/BUILD.bazel:4:12: Compiling source/matplot/core/line_spec.cpp failed: (Exit 2): cl.exe failed: error executing command
cd /d C:/users/liuzichao/desktop/cg/.cache/in4szefe/execroot/__main__
SET INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.19041.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.19041.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.19041.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.19041.0\\cppwinrt
SET PATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCPackages;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\bin\Roslyn;C:\Program Files\Microsoft Visual Studio\2022\Community\Team Tools\Performance Tools\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\Team Tools\Performance Tools;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools;C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\\x64;C:\Program Files (x86)\Windows Kits\10\bin\\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\\MSBuild\Current\Bin\amd64;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\;;C:\WINDOWS\system32;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\Linux\bin\ConnectionManagerExe
SET PWD=/proc/self/cwd
SET RUNFILES_MANIFEST_ONLY=1
SET TEMP=C:\Users\LIUZIC~1\AppData\Local\Temp
SET TMP=C:\Users\LIUZIC~1\AppData\Local\Temp
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\cl.exe /nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /bigobj /Zm500 /EHsc /wd4351 /wd4291 /wd4250 /wd4996 /Iexternal/matplotplusplus /Ibazel-out/x64_windows-fastbuild/bin/external/matplotplusplus /Iexternal/matplotplusplus/source /Ibazel-out/x64_windows-fastbuild/bin/external/matplotplusplus/source /Iexternal/matplotplusplus/source/3rd_party/cimg /Ibazel-out/x64_windows-fastbuild/bin/external/matplotplusplus/source/3rd_party/cimg /Iexternal/matplotplusplus/source/3rd_party/nodesoup/include /Ibazel-out/x64_windows-fastbuild/bin/external/matplotplusplus/source/3rd_party/nodesoup/include /showIncludes /MD /Od /Z7 /wd4117 -D__DATE__="redacted" -D__TIMESTAMP__="redacted" -D__TIME__="redacted" /std:c++20 /Fobazel-out/x64_windows-fastbuild/bin/external/matplotplusplus/_objs/matplotplusplus/line_spec.obj /c external/matplotplusplus/source/matplot/core/line_spec.cpp
# Configuration: d105fb13273de9ae46576eea29a2ce04076ea3899394eca8d1fd2ff8c61f51fb
# Execution platform: @local_config_platform//:host
external/matplotplusplus/source/matplot/core/line_spec.cpp(1): warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
C:\users\liuzichao\desktop\cg\.cache\in4szefe\execroot\__main__\external\matplotplusplus\source\matplot/core/line_spec.h(1): warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
external/matplotplusplus/source/matplot/core/line_spec.cpp(76): error C2001: newline in constant
external/matplotplusplus/source/matplot/core/line_spec.cpp(76): error C2679: binary '=': no operator found which takes a right-hand operand of type 'const char8_t [6]' (or there is no acceptable conversion)
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3091): note: could be 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const _Elem)'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3083): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const _Elem *const )'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3031): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(2962): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(std::initializer_list<_Elem>)'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(2826): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(std::basic_string<char,std::char_traits<char>,std::allocator<char>> &&) noexcept(<expr>)'
external/matplotplusplus/source/matplot/core/line_spec.cpp(77): note: while trying to match the argument list '(std::string, const char8_t [6])'
external/matplotplusplus/source/matplot/core/line_spec.cpp(77): error C2143: syntax error: missing ';' before 'break'
external/matplotplusplus/source/matplot/core/line_spec.cpp(80): error C2679: binary '=': no operator found which takes a right-hand operand of type 'const char8_t [7]' (or there is no acceptable conversion)
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3091): note: could be 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const _Elem)'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3083): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const _Elem *const )'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3031): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(2962): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(std::initializer_list<_Elem>)'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(2826): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(std::basic_string<char,std::char_traits<char>,std::allocator<char>> &&) noexcept(<expr>)'
external/matplotplusplus/source/matplot/core/line_spec.cpp(80): note: while trying to match the argument list '(std::string, const char8_t [7])'
external/matplotplusplus/source/matplot/core/line_spec.cpp(392): error C2001: newline in constant
external/matplotplusplus/source/matplot/core/line_spec.cpp(392): error C2679: binary '=': no operator found which takes a right-hand operand of type 'const char8_t [6]' (or there is no acceptable conversion)
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3091): note: could be 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const _Elem)'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3083): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const _Elem *const )'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3031): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(2962): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(std::initializer_list<_Elem>)'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(2826): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(std::basic_string<char,std::char_traits<char>,std::allocator<char>> &&) noexcept(<expr>)'
external/matplotplusplus/source/matplot/core/line_spec.cpp(393): note: while trying to match the argument list '(std::string, const char8_t [6])'
external/matplotplusplus/source/matplot/core/line_spec.cpp(393): error C2143: syntax error: missing ';' before 'break'
external/matplotplusplus/source/matplot/core/line_spec.cpp(396): error C2679: binary '=': no operator found which takes a right-hand operand of type 'const char8_t [7]' (or there is no acceptable conversion)
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3091): note: could be 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const _Elem)'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3083): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const _Elem *const )'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(3031): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(2962): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(std::initializer_list<_Elem>)'
with
[
_Elem=char
]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\xstring(2826): note: or 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> &std::basic_string<char,std::char_traits<char>,std::allocator<char>>::operator =(std::basic_string<char,std::char_traits<char>,std::allocator<char>> &&) noexcept(<expr>)'
external/matplotplusplus/source/matplot/core/line_spec.cpp(396): note: while trying to match the argument list '(std::string, const char8_t [7])'
Target //playground:window failed to build
INFO: Elapsed time: 37.951s, Critical Path: 33.00s
INFO: 15 processes: 9 internal, 6 local.
FAILED: Build did NOT complete successfully
Platform
- [ ] cross-platform issue - linux
- [x] cross-platform issue - windows
- [ ] cross-platform issue - macos
Environment Details:
- OS: Windows
- OS Version: 11
- Compiler: cl.exe
- Compiler version: Microsoft (R) C/C++ Optimizing Compiler Version 19.32.31332 for x64
Additional context
Fixes that works on Ubuntu Clang 14, can make it a PR: https://github.com/alandefreitas/matplotplusplus/compare/master...WildRackoon:matplotplusplus:fix-cpp20
Just replacing char
/string
with char8_t
/u8string
doesn't look like a general solution because char8_t
is a new type breaking the API.
I'm not sure what the best solution for this is yet. This is not the only library where u8
string literals broke things. All solutions look suboptimal because this is something where C++20 is not retroactively compatible with C++17.
@alandefreitas As a fix is already present on master, could we get a new release? Or is it intended to directly using master branch as tag (or a commit tag).
Sure: https://github.com/alandefreitas/matplotplusplus/releases/tag/v1.2.1
Wow, that was quick. Thank you very much :)