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

Matt McCormick matt.mccormick at kitware.com
Mon Aug 18 20:19:37 EDT 2014


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
>



More information about the vtk-developers mailing list