default_dialect.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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(__INTEL_COMPILER)
  28. # if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes)
  29. # define CXX_STD CXX_STD_17
  30. # elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
  31. # define CXX_STD CXX_STD_14
  32. # else
  33. # define CXX_STD __cplusplus
  34. # endif
  35. #else
  36. # define CXX_STD __cplusplus
  37. #endif
  38. #if DEFAULT_CXX23
  39. # if CXX_STD <= CXX_STD_20
  40. Outputter<CXX_STD> o;
  41. # endif
  42. #elif DEFAULT_CXX20
  43. # if CXX_STD <= CXX_STD_17
  44. Outputter<CXX_STD> o;
  45. # endif
  46. #elif DEFAULT_CXX17
  47. # if CXX_STD <= CXX_STD_14
  48. Outputter<CXX_STD> o;
  49. # endif
  50. #elif DEFAULT_CXX14
  51. # if CXX_STD <= CXX_STD_11
  52. Outputter<CXX_STD> o;
  53. # endif
  54. #elif DEFAULT_CXX11
  55. # if CXX_STD != CXX_STD_11
  56. Outputter<CXX_STD> o;
  57. # endif
  58. #else
  59. # if !DEFAULT_CXX98
  60. # error Buildsystem error
  61. # endif
  62. # if CXX_STD != CXX_STD_98 && CXX_STD != 1 && \
  63. !defined(__GXX_EXPERIMENTAL_CXX0X__)
  64. Outputter<CXX_STD> o;
  65. # endif
  66. #endif
  67. int main()
  68. {
  69. return 0;
  70. }