Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Building Corrade with -std=c++20 causes errors inside MinGW <numbers> header #150

Closed
jonesmz opened this issue Sep 11, 2022 · 3 comments
Closed

Comments

@jonesmz
Copy link

jonesmz commented Sep 11, 2022

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
@mosra mosra added this to the 2022.0a milestone Sep 13, 2022
@mosra mosra added this to TODO in Platforms via automation Sep 13, 2022
@mosra
Copy link
Owner

mosra commented Sep 13, 2022

Hm, I don't feel like adding workarounds for broken compilers, sorry 😅

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.

@jonesmz
Copy link
Author

jonesmz commented Sep 23, 2022

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.

@mosra mosra changed the title Windows mingw Corrade/Corrade\Utility\Path.cpp Building Corrade with -std=c++20 causes errors inside MinGW <numbers> header Sep 23, 2022
@mosra
Copy link
Owner

mosra commented Sep 23, 2022

Thank you for the confirmation 👍

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 mosra closed this as completed Sep 23, 2022
Platforms automation moved this from TODO to Done Sep 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Platforms
  
Done
Development

No branches or pull requests

2 participants