_EWL_RAW_ITERATORS

If _EWL_RAW_ITERATORS is defined, vector and string will use pointers for their iterators, otherwise they will use classes. The difference can effect argument dependent (Koenig) lookup in some cases. For example:

  #include <vector>
  #include <algorithm>
  int main()
  {
     std::vector<int> v1(10), v2(10);
     copy(v1.begin(), v1.end(), v2.begin());
  }
  

This compiles if the iterators are classes ( _EWL_RAW_ITERATORS undefined). But if the iterators are simply pointers, a compile time error results:

  Error   : undefined identifier 'copy'
  

To fix this code so that it works with either setting, add a std qualifier to copy:

  std::copy(v1.begin(), v1.end(), v2.begin());
  

The default configuration is for _EWL_RAW_ITERATORS to be undefined. There is no code size or run time overhead for this configuration (with inlining turned on). If you use _EWL_DEBUG (a configuration that does extensive run time checking when using the STL), then behavior is consistent with a _EWL_RAW_ITERATORS undefined setting, since the use of _EWL_DEBUG also forces vector and string iterators to be classes. Therefore the behavior of your application is less likely to change when switching between debug and release builds.

Note: Recompile EWL C++ when switching this flag.