corrade icon indicating copy to clipboard operation
corrade copied to clipboard

Windows mingw Corrade/Corrade\Utility\Path.cpp

Open jonesmz opened this issue 3 years ago • 1 comments

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

jonesmz avatar Sep 11 '22 23:09 jonesmz

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.

mosra avatar Sep 13 '22 10:09 mosra

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.

jonesmz avatar Sep 23 '22 04:09 jonesmz

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.

mosra avatar Sep 23 '22 09:09 mosra