[vtk-developers] Introducing (optional) C++11 features in VTK

Marcus D. Hanwell marcus.hanwell at kitware.com
Tue Aug 19 11:16:35 EDT 2014


Yes, and there are more extensive examples in the Qt project (for 5+),
and Boost where they both used the prefixed macro name approach. I can
get some of the basics in pretty quickly as I haven't heard much
opposition.

Marcus

On Mon, Aug 18, 2014 at 10:28 PM, Andrew Maclean
<andrew.amaclean at gmail.com> wrote:
> Brilliant! It looks as if ITK has already done a lot of this!
>
>
> Andrew
>
>
>
> On Tue, Aug 19, 2014 at 10:19 AM, Matt McCormick
> <matt.mccormick at kitware.com> wrote:
>>
>> VTK_OVERRIDE would be nice, and it would be nice to macros that are
>> similar to ITK.  Currently there is
>>
>>   ITK_OVERRIDE
>>   ITK_NOEXCEPT
>>   ITK_NULLPTR
>>
>>
>> http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Core/Common/include/itkMacro.h;h=aa4d40d7f5042eaf3c696af469d4cf0848239935;hb=HEAD#l121
>>
>>
>> Thanks,
>> Matt
>>
>> On Mon, Aug 18, 2014 at 7:25 PM, Marcus D. Hanwell
>> <marcus.hanwell at kitware.com> wrote:
>> > I am with David Gobbi and Ken. It would be a simple search and replace
>> > once support for pre-C++11 compilers were dropped and the potential
>> > for unintended consequences is too great. Glad to see there is general
>> > support, I should have included more on my reasoning, but didn't want
>> > to go into too much detail on implementation if there was little
>> > support for it.
>> >
>> > It sounds like there is, nullptr is definitely another piece of low
>> > hanging fruit. There is lots more that would be great to use, the
>> > language is evolving and it is important that we take advantage of the
>> > parts that make sense.
>> >
>> > Marcus
>> >
>> > On Mon, Aug 18, 2014 at 6:43 PM, David Gobbi <david.gobbi at gmail.com>
>> > wrote:
>> >> Yes, I also believe that using "#define override" has the potential to
>> >> cause problems.  Let's say that "override" appears as a variable
>> >> somewhere in code that someone brought into VTK and tested with a
>> >> C++11 compiler (this is legal, since "override" is not a keyword).
>> >> Then someone else tries compiling that code on C++03 where the
>> >> "#define override" is active.  All of a sudden, "override" is replaced
>> >> by nothing anywhere it is used as a variable (or as any other kind of
>> >> identifier).
>> >>
>> >>
>> >> On Mon, Aug 18, 2014 at 4:29 PM, Andrew Maclean
>> >> <andrew.amaclean at gmail.com> wrote:
>> >>> Hi Ken
>> >>>
>> >>> Good point, thanks for that.
>> >>>
>> >>> Andrew
>> >>>
>> >>>
>> >>> On Tue, Aug 19, 2014 at 8:25 AM, Moreland, Kenneth <kmorel at sandia.gov>
>> >>> wrote:
>> >>>>
>> >>>> +1 for me too.
>> >>>>
>> >>>> However, my vote is actually to introduce things like VTK_OVERRIDE
>> >>>> and
>> >>>> VTK_FINAL until pre-C++11 compilers get abandoned. I find it
>> >>>> disconcerting
>> >>>> when libraries try to get cute with changing the behavior of (or
>> >>>> trying to
>> >>>> emulate) keywords with preprocessor macros. It can be pretty
>> >>>> confusing when
>> >>>> something goes wrong, and good luck if you have to use two separate
>> >>>> projects
>> >>>> together that both tried to define preprocessor macros with different
>> >>>> implementations.
>> >>>>
>> >>>> -Ken
>> >>>>
>> >>>>
>> >>>> From: Andrew Maclean <andrew.amaclean at gmail.com>
>> >>>> Reply-To: "andrew.amaclean at gmail.com" <andrew.amaclean at gmail.com>
>> >>>> Date: Monday, August 18, 2014 4:09 PM
>> >>>> To: VTK Developers <vtk-developers at vtk.org>, "Marcus D. Hanwell"
>> >>>> <marcus.hanwell at kitware.com>, Ben Boeckel <ben.boeckel at kitware.com>,
>> >>>> Sean
>> >>>> McBride <sean at rogue-research.com>
>> >>>> Subject: [EXTERNAL] Re: [vtk-developers] Introducing (optional) C++11
>> >>>> features in VTK
>> >>>>
>> >>>> +1! ... actually: ++1 :-)
>> >>>>
>> >>>> I would support this. To keep VTK relevant we need to be introducing
>> >>>> these
>> >>>> features. Especially features like nullptr, unique_ptr etc.
>> >>>>
>> >>>> But I would not be happy at introducing more VTK defines like
>> >>>> VTK_OVERRIDE
>> >>>> and VTK_FINAL - unless absolutely necessary. I much prefer Sean's
>> >>>> idea of
>> >>>> using a modernise tool.
>> >>>>
>> >>>> Regards
>> >>>>    Andrew
>> >>>>
>> >>>>
>> >>>> On Tue, Aug 19, 2014 at 7:05 AM, <vtk-developers-request at vtk.org>
>> >>>> wrote:
>> >>>>>
>> >>>>>
>> >>>>> ---------- Forwarded message ----------
>> >>>>> From: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>
>> >>>>> To: VTK Developers <vtk-developers at vtk.org>
>> >>>>> Cc:
>> >>>>> Date: Mon, 18 Aug 2014 13:45:37 -0400
>> >>>>> Subject: [vtk-developers] Introducing (optional) C++11 features in
>> >>>>> VTK
>> >>>>> Hi,
>> >>>>>
>> >>>>> As we move forward, it would be great to get a feeling for people's
>> >>>>> thoughts about integrating some components of C++11 optionally. So
>> >>>>> if
>> >>>>> C++11 is available/enabled, there are several features we could
>> >>>>> enable
>> >>>>> optionally at compile time.
>> >>>>>
>> >>>>> A very simple example is that of the new override keyword, that is
>> >>>>> used to indicate that a member function is overriding a virtual
>> >>>>> function. Using this can avoid mistakes where the signature changes
>> >>>>> and derived classes are missed. It can be defined in a header (empty
>> >>>>> on old compilers, override with recent compilers). Final is similar,
>> >>>>> indicating that the virtual function cannot be overridden in derived
>> >>>>> classes.
>> >>>>>
>> >>>>> This would introduce changes to the VTK coding style, where we now
>> >>>>> use
>> >>>>> virtual for all virtual functions (first declaration, or subsequent
>> >>>>> overrides). We could introduce this gradually for new code, even
>> >>>>> having one or two dashboards compiling this way would help spot
>> >>>>> simple
>> >>>>> errors such as an incorrect signature not actually overriding a
>> >>>>> function, but in fact declaring a new virtual for example.
>> >>>>>
>> >>>>> In these cases I would suggest simple naming, so VTK_OVERRIDE and
>> >>>>> VTK_FINAL would be used where a C++11 only code would simply use the
>> >>>>> new keywords.
>> >>>>>
>> >>>>> Thoughts, objections? There are lots of other features, and I know
>> >>>>> it
>> >>>>> will be a while before we can use them all but it would be great to
>> >>>>> make a start with some of the easier ones that can improve code
>> >>>>> quality with little overhead.
>> >>>>>
>> >>>>> Marcus
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ---------- Forwarded message ----------
>> >>>>> From: Ben Boeckel <ben.boeckel at kitware.com>
>> >>>>> To: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>
>> >>>>> Cc: VTK Developers <vtk-developers at vtk.org>
>> >>>>> Date: Mon, 18 Aug 2014 14:21:56 -0400
>> >>>>> Subject: Re: [vtk-developers] Introducing (optional) C++11 features
>> >>>>> in
>> >>>>> VTK
>> >>>>> On Mon, Aug 18, 2014 at 13:45:37 -0400, Marcus D. Hanwell wrote:
>> >>>>> > Thoughts, objections? There are lots of other features, and I know
>> >>>>> > it
>> >>>>> > will be a while before we can use them all but it would be great
>> >>>>> > to
>> >>>>> > make a start with some of the easier ones that can improve code
>> >>>>> > quality with little overhead.
>> >>>>>
>> >>>>> What about "= delete" for removing default assignment and copy
>> >>>>> constructors?
>> >>>>>
>> >>>>> --Ben
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ---------- Forwarded message ----------
>> >>>>> From: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>
>> >>>>> To: Ben Boeckel <ben.boeckel at kitware.com>
>> >>>>> Cc: VTK Developers <vtk-developers at vtk.org>
>> >>>>> Date: Mon, 18 Aug 2014 14:29:10 -0400
>> >>>>> Subject: Re: [vtk-developers] Introducing (optional) C++11 features
>> >>>>> in
>> >>>>> VTK
>> >>>>> On Mon, Aug 18, 2014 at 2:21 PM, Ben Boeckel
>> >>>>> <ben.boeckel at kitware.com>
>> >>>>> wrote:
>> >>>>> > On Mon, Aug 18, 2014 at 13:45:37 -0400, Marcus D. Hanwell wrote:
>> >>>>> >> Thoughts, objections? There are lots of other features, and I
>> >>>>> >> know it
>> >>>>> >> will be a while before we can use them all but it would be great
>> >>>>> >> to
>> >>>>> >> make a start with some of the easier ones that can improve code
>> >>>>> >> quality with little overhead.
>> >>>>> >
>> >>>>> > What about "= delete" for removing default assignment and copy
>> >>>>> > constructors?
>> >>>>> >
>> >>>>> Certainly, I think we should start out simple and then build it out.
>> >>>>> If we have prototypes for a few of the most useful features that can
>> >>>>> easily be encapsulated in compile time logic that will degrade to
>> >>>>> C++98 that would be great.
>> >>>>>
>> >>>>> Marcus
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ---------- Forwarded message ----------
>> >>>>> From: "Sean McBride" <sean at rogue-research.com>
>> >>>>> To: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>, "VTK
>> >>>>> Developers"
>> >>>>> <vtk-developers at vtk.org>
>> >>>>> Cc:
>> >>>>> Date: Mon, 18 Aug 2014 16:50:12 -0400
>> >>>>> Subject: Re: [vtk-developers] Introducing (optional) C++11 features
>> >>>>> in
>> >>>>> VTK
>> >>>>> On Mon, 18 Aug 2014 13:45:37 -0400, Marcus D. Hanwell said:
>> >>>>>
>> >>>>> >As we move forward, it would be great to get a feeling for people's
>> >>>>> >thoughts about integrating some components of C++11 optionally. So
>> >>>>> > if
>> >>>>> >C++11 is available/enabled, there are several features we could
>> >>>>> > enable
>> >>>>> >optionally at compile time.
>> >>>>>
>> >>>>> +1 from me.
>> >>>>>
>> >>>>> nullptr is another one that can be made to work even on older
>> >>>>> compilers
>> >>>>> with some #define glue.
>> >>>>>
>> >>>>> Instead of creating a 'VTK_OVERRIDE', we could also use 'override'
>> >>>>> as if
>> >>>>> we required C++11 and "#define override /* nothing */" as
>> >>>>> appropriate.  Then
>> >>>>> when C++11 really is the minimun requirement no big find/replace is
>> >>>>> required.  Just a thought.
>> >>>>>
>> >>>>> PS: I already have dashboards building as C++11 and C++14.
>> >>>>>
>> >>>>> Cheers,
>> >>>>>
>> >>>>> --
>> >>>>> ____________________________________________________________
>> >>>>> Sean McBride, B. Eng                 sean at rogue-research.com
>> >>>>> Rogue Research                        www.rogue-research.com
>> >>>>> Mac Software Developer              Montréal, Québec, Canada
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ---------- Forwarded message ----------
>> >>>>> From: "Sean McBride" <sean at rogue-research.com>
>> >>>>> To: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>, "VTK
>> >>>>> Developers"
>> >>>>> <vtk-developers at vtk.org>
>> >>>>> Cc:
>> >>>>> Date: Mon, 18 Aug 2014 17:05:38 -0400
>> >>>>> Subject: Re: [vtk-developers] Introducing (optional) C++11 features
>> >>>>> in
>> >>>>> VTK
>> >>>>> On Mon, 18 Aug 2014 16:50:12 -0400, Sean McBride said:
>> >>>>>
>> >>>>> >nullptr is another one that can be made to work even on older
>> >>>>> > compilers
>> >>>>> >with some #define glue.
>> >>>>> >
>> >>>>> >Instead of creating a 'VTK_OVERRIDE', we could also use 'override'
>> >>>>> > as if
>> >>>>> >we required C++11 and "#define override /* nothing */" as
>> >>>>> > appropriate.
>> >>>>> >Then when C++11 really is the minimun requirement no big
>> >>>>> > find/replace is
>> >>>>> >required.  Just a thought.
>> >>>>>
>> >>>>> I hit send too fast...
>> >>>>>
>> >>>>> I also wanted to suggest looking at the clang-modernize tool, which
>> >>>>> is "a
>> >>>>> standalone tool used to automatically convert C++ code written
>> >>>>> against old
>> >>>>> standards to use features of the newest C++ standard".
>> >>>>>
>> >>>>> <http://clang.llvm.org/extra/clang-modernize.html>
>> >>>>>
>> >>>>> Specifically, it can be used to automatically add 'override' and
>> >>>>> convert
>> >>>>> to 'nullptr':
>> >>>>>
>> >>>>> <http://clang.llvm.org/extra/AddOverrideTransform.html>
>> >>>>> <http://clang.llvm.org/extra/UseNullptrTransform.html>
>> >>>>>
>> >>>>> Cheers,
>> >> _______________________________________________
>> >> Powered by www.kitware.com
>> >>
>> >> Visit other Kitware open-source projects at
>> >> http://www.kitware.com/opensource/opensource.html
>> >>
>> >> Follow this link to subscribe/unsubscribe:
>> >> http://public.kitware.com/mailman/listinfo/vtk-developers
>> >>
>> > _______________________________________________
>> > Powered by www.kitware.com
>> >
>> > Visit other Kitware open-source projects at
>> > http://www.kitware.com/opensource/opensource.html
>> >
>> > Follow this link to subscribe/unsubscribe:
>> > http://public.kitware.com/mailman/listinfo/vtk-developers
>> >
>
>
>
>
> --
> ___________________________________________
> Andrew J. P. Maclean
>
> ___________________________________________



More information about the vtk-developers mailing list