[vtk-developers] Use of std:: in vtk

Brad King brad.king at kitware.com
Mon Dec 14 17:10:19 EST 2009


Bill Lorensen wrote:
> Folks,
> 
> Coming from the itk world, we always use std::cout and std:: for
> string, vector, map, etc. In trying to check in some new examples, my
> pre-commit failed with the message:
> 
> GenerateCubesFromLabels.cxx has used the std:: or vtkstd:: to access streams.
> For example, std::cout or vtkstd::endl.
> For VTK, you must not use a namespace for streams.
> Common/vtkIOStream.h for list of using directives in VTK.

The vtkstd namespace is used for STL, while the global namespace is
used for streams.

> I'm sure there used to be a good reason for this in the old days, but
> is this restriction still necessary?

I don't know if we still support platforms that don't have std:: for
everything.  Someone would have to check this.  It should be verified
both that streams are in std and that STL is in std.  I know we used
to have

  VS6 - Supports both old and ansi streams, old streams have no std
  HP  - At least one old HP compiler had no std for STL
  Others???

If it were deemed safe I would certainly be interested in seeing use
of std:: in VTK.

> Also, to use std::string I needed
> to change it to vtkstd::string. It makes one wonder how std::string
> differs from vtkstd::string.

It's just a typedef (or perhaps using declaration) to either ::string
or std::string depending on what the compiler provides.

> I did change std::cout to cout, but this is in conflict with itk and
> probably other styles.For instance, I noticed that CMake source code
> uses std::string, vector, map etc.

CMake is an application that does not provide public header files.
It can get away with moving things into the std namespace outright,
and does so to get std:: to work everywhere.

-Brad



More information about the vtk-developers mailing list