Windows mingw Corrade/Corrade\Utility\Path.cpp
See this workflow run: https://github.com/jonesmz/osp-magnum/runs/8295901356
I don't know why this is happening, but i can confirm that adding -fext-numeric-literals to the compiler options does fix it.
Perhaps Corrade could add the flag if mingw is detected?
The CXX compiler identification is GNU 11.2.0
C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin\g++.exe -DCORRADE_IS_DEBUG_BUILD -DNOMINMAX -DUNICODE -DWIN32_LEAN_AND_MEAN -D_UNICODE -ID:/a/osp-magnum/osp-magnum/3rdparty/corrade/src -ID:/a/osp-magnum/osp-magnum/build/3rdparty/corrade/src -g -fno-omit-frame-pointer -O0 -gz -Wall -Wextra -Wold-style-cast -Winit-self -Werror=return-type -Wmissing-declarations -Wpedantic -fvisibility=hidden -fvisibility-inlines-hidden -Wzero-as-null-pointer-constant -Wdouble-promotion -std=c++20 -MD -MT 3rdparty/corrade/src/Corrade/Utility/CMakeFiles/CorradeUtilityObjects.dir/Path.cpp.obj -MF 3rdparty\corrade\src\Corrade\Utility\CMakeFiles\CorradeUtilityObjects.dir\Path.cpp.obj.d -o 3rdparty/corrade/src/Corrade/Utility/CMakeFiles/CorradeUtilityObjects.dir/Path.cpp.obj -c D:/a/osp-magnum/osp-magnum/3rdparty/corrade/src/Corrade/Utility/Path.cpp
In file included from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\bits\max_size_type.h:37,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\bits\ranges_base.h:38,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\string_view:48,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\bits\basic_string.h:48,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\string:55,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\bits\locale_classes.h:40,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\bits\ios_base.h:41,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\streambuf:41,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\bits\streambuf_iterator.h:35,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\iterator:66,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\bits\ranges_algobase.h:36,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\bits\ranges_algo.h:35,
from c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\algorithm:64,
from D:/a/osp-magnum/osp-magnum/3rdparty/corrade/src/Corrade/Utility/Path.cpp:46:
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:139:9: error: unable to find numeric literal operator 'operator""Q'
139 | = 2.718281828459045235360287471352662498Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:139:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:144:9: error: unable to find numeric literal operator 'operator""Q'
144 | = 1.442695040888963407359924681001892137Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:144:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:149:9: error: unable to find numeric literal operator 'operator""Q'
149 | = 0.434294481903251827651128918916605082Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:149:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:154:9: error: unable to find numeric literal operator 'operator""Q'
154 | = 3.141592653589793238462643383279502884Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:154:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:159:9: error: unable to find numeric literal operator 'operator""Q'
159 | = 0.318309886183790671537767526745028724Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:159:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:164:9: error: unable to find numeric literal operator 'operator""Q'
164 | = 0.564189583547756286948079451560772586Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:164:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:169:9: error: unable to find numeric literal operator 'operator""Q'
169 | = 0.693147180559945309417232121458176568Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:169:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:174:9: error: unable to find numeric literal operator 'operator""Q'
174 | = 2.302585092994045684017991454684364208Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:174:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:179:9: error: unable to find numeric literal operator 'operator""Q'
179 | = 1.414213562373095048801688724209698079Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:179:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:184:9: error: unable to find numeric literal operator 'operator""Q'
184 | = 1.732050807568877293527446341505872367Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:184:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:189:9: error: unable to find numeric literal operator 'operator""Q'
189 | = 0.577350269189625764509148780501957456Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:189:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:194:9: error: unable to find numeric literal operator 'operator""Q'
194 | = 0.577215664901532860606512090082402431Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:194:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:199:9: error: unable to find numeric literal operator 'operator""Q'
199 | = 1.618033988749894848204586834365638118Q;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\programdata\chocolatey\lib\mingw\tools\install\mingw64\include\c++\11.2.0\numbers:199:9: note: use '-fext-numeric-literals' to enable more built-in suffixes
Hm, I don't feel like adding workarounds for broken compilers, sorry :sweat_smile:
What you could do is to not build Corrade with -std=c++20, it only makes the build slower for no reason. Then it won't / shouldn't include the C++20-specific <numbers> header and thus should circumvent this error.
You're right.
Using
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
instead of
SET(CMAKE_CXX_STANDARD 20)
does get past this specific problem.
I'm fine if you want to close this issue.
Thank you for the confirmation :+1:
I edited the issue title to make it easier to find when someone else hits the same issue, but I'm going to close it, yes -- this is a STL bug, not something a library should be fixing from outside.