On Wed, 30 Dec 2020 at 23:17, Kornel Benko <kor...@lyx.org> wrote: > Am Wed, 30 Dec 2020 21:08:42 +0100 > schrieb Thibaut Cuvelier <tcuvel...@lyx.org>: > > > On Wed, 30 Dec 2020 at 16:06, Kornel Benko <kor...@lyx.org> wrote: > > > > > Am Wed, 30 Dec 2020 15:17:36 +0100 > > > schrieb Thibaut Cuvelier <tcuvel...@lyx.org>: > > > > > > > On Wed, 30 Dec 2020 at 09:01, Yuriy Skalko <yuriy.ska...@gmail.com> > > > wrote: > > > > > > > > > > Here is a newer version of the patch that does not use > _HAS_CXX17, > > > as it > > > > > > should not really be relied upon ( > > > > > > > > > > > > > > > https://stackoverflow.com/questions/52379233/is-has-cxx17-marco-usable-in-custom-project-headers-to-enable-c17-language > > > > > ). > > > > > > > > > > I think the right way will be using only standard-compliant > > > > > "__cplusplus" in sources and adding the option "/Zc:__cplusplus" > for > > > > > MSVC compiler in the build scripts so it handle __cplusplus in > > > > > standard-compliant way: > > > > > > > > > > > > > > > > > > > https://docs.microsoft.com/en-us/cpp/build/reference/zc-cplusplus?view=msvc-160 > > > > > > > > > > > > > It seems that it's not that easy to pass this flag through CMake, > and the > > > > devs are not really willing to do something about it: > > > > https://gitlab.kitware.com/cmake/cmake/-/issues/18837 > > > > > > We can do it. For instance add the flag in > > > ./development/cmake/config.h.cmake > > > #cmakedefine LYX_EXTRA_CXXFLAGS 1 > > > #if defined(LYX_EXTRA_CXXFLAGS) > > > #define ${LYX_EXTRA_CXXFLAGS} > > > #endif > > > Now you could use > > > $ cmake ... -DLYX_EXTRA_CXXFLAGS=__cplusplus > > > and the resulting config.h will contain > > > #define LYX_EXTRA_CXXFLAGS 1 > > > #if defined(LYX_EXTRA_CXXFLAGS) > > > #define __cplusplus > > > #endif > > > > > > > Would it be possible to have a flag set by default for MSVC? It's not > just > > because it would look nice, it's for basically being able to build LyX, > > it's a lot like adding libraries to link for MinGW or Cygwin > > (src/CMakeLists.txt). > > > > Also, it won't work if it's in the config.h file that's included > > everywhere: > > This is not the case. This config file is created at configure time and is > exactly usefull _only_ to this build. > > > it's a flag that must be passed when calling the compiler (and > > I guess no sane compiler will let you redefine the macro __cplusplus > > defined in the standard). >
The problem is not that's something included *everywhere*, but simply that it's *included*. An include file cannot change a flag passed to the compiler (with a few exceptions, but this one is not). The __cplusplus macro value is defined by the compiler, you cannot override it. If you try, MSVC will yell: warning C4117: macro name '__cplusplus' is reserved, '#define' ignored Anyway, when updating my compiler, I got the same message as Eugene for RandomAccessList.h. I'm attaching a patch for all issues.
0001-Fix-compilation-with-MSVC-19.patch
Description: Binary data
-- lyx-devel mailing list lyx-devel@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-devel