From 5badf4672d3c647465e1764006440beb5c5109d8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 23 Aug 2019 09:55:28 +0200 Subject: MSVC fix --- libbuild2/action.hxx | 14 +++++++++++--- libbuild2/target.cxx | 4 ++-- libbuild2/target.hxx | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/libbuild2/action.hxx b/libbuild2/action.hxx index 9fa2a16..01c5307 100644 --- a/libbuild2/action.hxx +++ b/libbuild2/action.hxx @@ -116,10 +116,18 @@ namespace build2 template struct action_state { - T data[2]; // [0] -- inner, [1] -- outer. + T inner; + T outer; - T& operator[] (action a) {return data[a.inner () ? 0 : 1];} - const T& operator[] (action a) const {return data[a.inner () ? 0 : 1];} + T& operator[] (action a) {return a.inner () ? inner : outer;} + const T& operator[] (action a) const {return a.inner () ? inner : outer;} + + action_state () = default; + + template + explicit + action_state (A&&... a) + : inner (forward (a)...), outer (forward (a)...) {} }; // Id constants for build-in and pre-defined meta/operations. diff --git a/libbuild2/target.cxx b/libbuild2/target.cxx index 9d81dee..dbca6cd 100644 --- a/libbuild2/target.cxx +++ b/libbuild2/target.cxx @@ -418,8 +418,8 @@ namespace build2 { t->ext_ = &i->first.ext; t->implied = implied; - t->state.data[0].target_ = t; - t->state.data[1].target_ = t; + t->state.inner.target_ = t; + t->state.outer.target_ = t; return pair (*t, move (ul)); } diff --git a/libbuild2/target.hxx b/libbuild2/target.hxx index f140122..f1c9d5f 100644 --- a/libbuild2/target.hxx +++ b/libbuild2/target.hxx @@ -775,7 +775,7 @@ namespace build2 : ctx (c), dir (move (d)), out (move (o)), name (move (n)), vars (c, false /* global */), - state {opstate (c), opstate (c)} {} + state (c) {} target (target&&) = delete; target& operator= (target&&) = delete; -- cgit v1.1