default_dialect.cpp 1.5 KB

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