Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2014 VMware, Inc.
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the "Software"),
  8.  * to deal in the Software without restriction, including without limitation
  9.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10.  * and/or sell copies of the Software, and to permit persons to whom the
  11.  * Software is furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice shall be included
  14.  * in all copies or substantial portions of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22.  * OTHER DEALINGS IN THE SOFTWARE.
  23.  *
  24.  **************************************************************************/
  25.  
  26.  
  27. /*
  28.  * Including system's headers inside `extern "C" { ... }` is not safe, as system
  29.  * headers may have C++ code in them, and C++ code inside extern "C"
  30.  * leads to syntatically incorrect code.
  31.  *
  32.  * This is because putting code inside extern "C" won't make __cplusplus define
  33.  * go away, that is, the system header being included thinks is free to use C++
  34.  * as it sees fits.
  35.  *
  36.  * Including non-system headers inside extern "C"  is not safe either, because
  37.  * non-system headers end up including system headers, hence fall in the above
  38.  * case too.
  39.  *
  40.  * Conclusion, includes inside extern "C" is simply not portable.
  41.  *
  42.  *
  43.  * This header helps surface these issues.
  44.  */
  45.  
  46. #ifdef __cplusplus
  47. template<class T> class _IncludeInsideExternCNotPortable;
  48. #endif
  49.