From 34de70e251592fd4da73ffb8f908ba4e728f385c Mon Sep 17 00:00:00 2001 From: Louis Brandy Date: Fri, 11 Dec 2015 09:21:43 -0800 Subject: [PATCH] folly::dynamic::operator= for std::initializer_list Summary: If we're going to have a constructor for it, we should have operator=. Otherwise, gcc-4.9 goes via the copy constructor effectively "ignoring" the attempted nesting for e.g.. ``` d = { other_dynamic }; // Should be ARRAY containing dynamic ``` NOTE: this only fixes gcc-4.9, there's still issues in clang. Reviewed By: yfeldblum Differential Revision: D2745180 fb-gh-sync-id: 667787c788fc7c131d8a34c608c355f5b875be50 --- folly/dynamic-inl.h | 5 +++++ folly/dynamic.h | 1 + 2 files changed, 6 insertions(+) diff --git a/folly/dynamic-inl.h b/folly/dynamic-inl.h index 8924fb3d..8bdcf2f4 100644 --- a/folly/dynamic-inl.h +++ b/folly/dynamic-inl.h @@ -282,6 +282,11 @@ inline dynamic::dynamic(fbstring&& s) new (&u_.string) fbstring(std::move(s)); } +inline dynamic& dynamic::operator=(std::initializer_list il) { + (*this) = dynamic(il); + return *this; +} + inline dynamic::dynamic(std::initializer_list il) : type_(ARRAY) { diff --git a/folly/dynamic.h b/folly/dynamic.h index fa494555..e2ed78a8 100644 --- a/folly/dynamic.h +++ b/folly/dynamic.h @@ -167,6 +167,7 @@ public: * dynamic v = { 1, 2, 3, "foo" }; */ /* implicit */ dynamic(std::initializer_list il); + dynamic& operator=(std::initializer_list il); /* * Conversion constructors from most of the other types. -- 2.34.1