Clone of mesa.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

no_extern_c.h 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. * Including system's headers inside `extern "C" { ... }` is not safe, as system
  27. * headers may have C++ code in them, and C++ code inside extern "C"
  28. * leads to syntatically incorrect code.
  29. *
  30. * This is because putting code inside extern "C" won't make __cplusplus define
  31. * go away, that is, the system header being included thinks is free to use C++
  32. * as it sees fits.
  33. *
  34. * Including non-system headers inside extern "C" is not safe either, because
  35. * non-system headers end up including system headers, hence fall in the above
  36. * case too.
  37. *
  38. * Conclusion, includes inside extern "C" is simply not portable.
  39. *
  40. *
  41. * This header helps surface these issues.
  42. */
  43. #ifdef __cplusplus
  44. template<class T> class _IncludeInsideExternCNotPortable;
  45. #endif