summaryrefslogtreecommitdiffstats
path: root/src/chapter0/lesson13
diff options
context:
space:
mode:
Diffstat (limited to 'src/chapter0/lesson13')
-rw-r--r--src/chapter0/lesson13/standard.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/chapter0/lesson13/standard.cpp b/src/chapter0/lesson13/standard.cpp
new file mode 100644
index 0000000..e27bc87
--- /dev/null
+++ b/src/chapter0/lesson13/standard.cpp
@@ -0,0 +1,43 @@
+// This program prints the C++ language standard your compiler is currently
+// using
+
+#include <iostream>
+
+const int numStandards = 7;
+
+const long stdCode[numStandards] = {199711L, 201103L, 201402L, 201703L,
+ 202002L, 202302L, 202612L};
+const char *stdName[numStandards] = {"Pre-C++11", "C++11", "C++14", "C++17",
+ "C++20", "C++23", "C++26"};
+
+long getCPPStandard() {
+#if defined(_MSVC_LANG)
+ return _MSVC_LANG;
+#elif defined(_MSC_VER)
+ return -1;
+#else
+ return __cplusplus;
+#endif
+}
+
+int main() {
+ long standard = getCPPStandard();
+
+ if (standard == -1) {
+ std::cout << "Error: Unable to determine your language standard.\n";
+ return 0;
+ }
+
+ for (int i = 0; i < numStandards; ++i) {
+ // If the reported version is one of the finalized standard
+ // codes then we know exactly what version the compiler is
+ // running
+ if (standard == stdCode[i]) {
+ std::cout << "Your compiler is using " << stdName[i]
+ << " (language standard code " << standard << "L)\n";
+ break;
+ }
+ }
+
+ return 0;
+}