Patches to improve compatibility with modern C++ standard

Thibaut Cuvelier dourouc05 at gmail.com
Mon May 4 20:16:10 UTC 2020


That's a lot of emails :)!

I hereby grant permission to use my contributions to LyX under the GPL
license version 2 or later.

Code with std::unary_function is still valid in C++11, but became
deprecated in this version (and deleted with C++17). VC has not exactly
been known for standards compliance in the past, but they improve: I could
not compile LyX in C++11 or C++14 modes due to some features being only
available starting with C++17, even though that sounds strange.

I changed the code to use more often the ::find() functions and similar. In
TextClass, I had to add new methods. That's the included patch, which
replaces two of the previous patches.

Thibaut Cuvelier


On Mon, 4 May 2020 at 20:58, Richard Kimberly Heck <rikiheck at lyx.org> wrote:

> On 5/4/20 2:09 PM, Jean-Marc Lasgouttes wrote:
> > Le 04/05/2020 à 06:05, Thibaut Cuvelier a écrit :
> >> Dear list,
> >
> > Dear Thibaut,
> >
> >> During my work on DocBook (which started at
> >> www.lyx.org/trac/ticket/8444 <http://www.lyx.org/trac/ticket/8444>),
> >> I switched to Visual C++ 2019 as a compiler. The only way I found to
> >> make it compile large parts of LyX was to switch to recent C++
> >> standards, so that all features are available. Unfortunately, some
> >> deprecated parts of C++ have been removed in the latest versions of
> >> the standard… These changes are probably not required for now with
> >> other compilers, but some form will be required in the future when
> >> switching to newer C++ versions.
> >
> > Thanks for the patches. As you mentioned later, the boost part should
> > be done by upgrading boost. The new includues are OK.
> >
> > Concerning the "modern" C++ contructs, I am all for removing helper
> > casses that we had, but I would not describe lambda functions as
> > something that one may like to read.
>
> I was just working on this, for the same reason: All the lambdas
> threaten to make the code unreadable, and hard to maintain (as so many
> of them declare the same function). But what we can do is:
>
> // Takes the argument d and returns a (pointer to a) function that
> returns whether
> // some Branch b has the name d.
> std::function<bool (Branch const &)> BranchNamesEqual(docstring const & d)
> {
>     return [d](Branch const & b){ return b.branch() == d; };
> }
>
> I think that should work in C++11? Similarly in other cases.
>
> I'm happy to do these fixes if the idea seems right.
>
> Riki
>
>
> --
> lyx-devel mailing list
> lyx-devel at lists.lyx.org
> http://lists.lyx.org/mailman/listinfo/lyx-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lyx.org/pipermail/lyx-devel/attachments/20200504/4bfd2c07/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Deprecated-elements-from-stdlib-removed-in-C-17.patch
Type: application/octet-stream
Size: 23866 bytes
Desc: not available
URL: <http://lists.lyx.org/pipermail/lyx-devel/attachments/20200504/4bfd2c07/attachment-0001.obj>


More information about the lyx-devel mailing list