aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cxx/init.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2021-01-14 14:31:27 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2021-01-14 14:31:27 +0200
commit8345d5eba80a11de363c8a96070316fdd6b6fd22 (patch)
tree933d2537c7545c3e28c75ce60a108bcfa7ccfd37 /libbuild2/cxx/init.cxx
parentf91dcce80beb48bf8b444b472f4820a4ff2b33e5 (diff)
Pass /Zc:__cplusplus by default starting from VC 15.7 (GitHub issue #107)
This can be overridden by passing a variant of this option as part of the compiler mode options.
Diffstat (limited to 'libbuild2/cxx/init.cxx')
-rw-r--r--libbuild2/cxx/init.cxx11
1 files changed, 11 insertions, 0 deletions
diff --git a/libbuild2/cxx/init.cxx b/libbuild2/cxx/init.cxx
index ad0dd05..e2d7343 100644
--- a/libbuild2/cxx/init.cxx
+++ b/libbuild2/cxx/init.cxx
@@ -189,6 +189,17 @@ namespace build2
if (!o.empty ())
prepend (move (o));
+ // Since VC 15.7 we can get a (more) accurate __cplusplus value if
+ // we ask for it with /Zc:__cplusplus:
+ //
+ // https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
+ //
+ if (mj > 19 || (mj == 19 && mi >= 14))
+ {
+ if (!find_option_prefix ("/Zc:__cplusplus", mode))
+ prepend ("/Zc:__cplusplus");
+ }
+
break;
}
case compiler_class::gcc: