From be14801929cf2a6caced87df034ae12a85f42aa6 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 30 Nov 2016 17:32:43 +0200 Subject: Add support for typed/untyped concatenated expansion --- build2/variable.ixx | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'build2/variable.ixx') diff --git a/build2/variable.ixx b/build2/variable.ixx index 4d70685..e5fe794 100644 --- a/build2/variable.ixx +++ b/build2/variable.ixx @@ -80,6 +80,14 @@ namespace build2 return *this; } + inline void value:: + assign (name&& n, const variable* var) + { + names ns; + ns.push_back (move (n)); + assign (move (ns), var); + } + inline bool operator!= (const value& x, const value& y) { @@ -226,9 +234,11 @@ namespace build2 return value_traits::convert (move (l), &r); } + // This one will be SFINAE'd out unless T is a container. + // template - inline T - convert (names&& ns) + inline auto + convert (names&& ns) -> decltype (value_traits::convert (move (ns))) { return value_traits::convert (move (ns)); } @@ -474,11 +484,10 @@ namespace build2 inline void value_traits:: assign (value& v, name&& x) { - name* p (v - ? &(v.as () = move (x)) - : new (&v.data_) name (move (x))); - - p->original = false; + if (v) + v.as () = move (x); + else + new (&v.data_) name (move (x)); } inline int value_traits:: -- cgit v1.1