default_dialect.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. template <long l>
  2. struct Outputter;
  3. #define CXX_STD_98 199711L
  4. #define CXX_STD_11 201103L
  5. #define CXX_STD_14 201402L
  6. #define CXX_STD_17 201703L
  7. #define CXX_STD_20 202002L
  8. #define CXX_STD_23 202302L
  9. #if defined(__INTEL_COMPILER) && defined(_MSVC_LANG)
  10. # if _MSVC_LANG > CXX_STD_17
  11. # define CXX_STD _MSVC_LANG
  12. # elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
  13. # define CXX_STD CXX_STD_20
  14. # elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17
  15. # define CXX_STD CXX_STD_20
  16. # elif _MSVC_LANG > CXX_STD_14
  17. # define CXX_STD CXX_STD_17
  18. # elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi)
  19. # define CXX_STD CXX_STD_14
  20. # elif defined(__INTEL_CXX11_MODE__)
  21. # define CXX_STD CXX_STD_11
  22. # else
  23. # define CXX_STD CXX_STD_98
  24. # endif
  25. #elif defined(_MSC_VER) && defined(_MSVC_LANG)
  26. # define CXX_STD _MSVC_LANG
  27. #elif defined(__NVCOMPILER)
  28. # if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
  29. # define CXX_STD CXX_STD_20
  30. # else
  31. # define CXX_STD __cplusplus
  32. # endif
  33. #elif defined(__INTEL_COMPILER)
  34. # if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes)
  35. # define CXX_STD CXX_STD_17
  36. # elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
  37. # define CXX_STD CXX_STD_14
  38. # else
  39. # define CXX_STD __cplusplus
  40. # endif
  41. #elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__)
  42. # if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
  43. # define CXX_STD CXX_STD_14
  44. # else
  45. # define CXX_STD __cplusplus
  46. # endif
  47. #else
  48. # define CXX_STD __cplusplus
  49. #endif
  50. #if DEFAULT_CXX23
  51. # if CXX_STD <= CXX_STD_20
  52. Outputter<CXX_STD> o;
  53. # endif
  54. #elif DEFAULT_CXX20
  55. # if CXX_STD <= CXX_STD_17
  56. Outputter<CXX_STD> o;
  57. # endif
  58. #elif DEFAULT_CXX17
  59. # if CXX_STD <= CXX_STD_14
  60. Outputter<CXX_STD> o;
  61. # endif
  62. #elif DEFAULT_CXX14
  63. # if CXX_STD <= CXX_STD_11
  64. Outputter<CXX_STD> o;
  65. # endif
  66. #elif DEFAULT_CXX11
  67. # if CXX_STD != CXX_STD_11
  68. Outputter<CXX_STD> o;
  69. # endif
  70. #else
  71. # if !DEFAULT_CXX98
  72. # error Buildsystem error
  73. # endif
  74. # if CXX_STD != CXX_STD_98 && CXX_STD != 1 && \
  75. !defined(__GXX_EXPERIMENTAL_CXX0X__)
  76. Outputter<CXX_STD> o;
  77. # endif
  78. #endif
  79. int main()
  80. {
  81. return 0;
  82. }