Skip to content
Snippets Groups Projects
Select Git revision
  • c0d9e6057c882fe646c844011d2cddf3c11c75a9
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
31 results

0004-g++12.patch

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    0004-g++12.patch 1.99 KiB
    [dbus-c++] rearrange some deckchairs in types.h
    
    clang requires that when you invoke an operator with type-based dispatch, the
    variant for the type you are invoking it on has already been pre-declared; this
    bites us in the Variant T() operator, which relies on the overloaded '>>'
    operator for MessageIter; we invoke >> on some type T, but >> for T is declared
    later in the file.
    
    To hack around this, switch over to just forward-declaring the existence of the
    T() operator, and put the body of the T() operator after all the
    declarations/definitions of MessageIter >> operators. Also, shuffle the Variant
    MessageIter >> operator to be above the map >> operator, since if someone tries
    to invoke >> on a map of variants, they'll have the same problem.
    
    There will probably be other, similar problems requiring more rearrangements in
    future.
    
    BUG=chromium-os:37776
    TEST=trybot
    
    Change-Id: I024ec58d427d960372d92ecaa48f711b4569778f
    Signed-off-by: Elly Fong-Jones <ellyjones@chromium.org>
    Reviewed-on: https://gerrit.chromium.org/gerrit/41576
    Reviewed-by: Guozhi Wei <carrot@google.com>
    Reviewed-by: Ryan Sleevi <rsleevi@chromium.org>
    
    diff --git a/include/dbus-c++/types.h b/include/dbus-c++/types.h
    index a11149a..72606f6 100644
    --- a/include/dbus-c++/types.h
    +++ b/include/dbus-c++/types.h
    
    @@ -103,13 +103,7 @@
     	}
    
     	template <typename T>
    -	operator T() const
    -	{
    -		T cast;
    -		MessageIter ri = _msg.reader();
    -		ri >> cast;
    -		return cast;
    -	}
    +	operator T() const;
    
     private:
    
    @@ -440,6 +434,8 @@
     	return ++iter;
     }
    
    +extern DXXAPI DBus::MessageIter &operator >> (DBus::MessageIter &iter, DBus::Variant &val);
    +
     template<typename E>
     inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, std::vector<E>& val)
     {
    @@ -521,6 +517,14 @@
     	return ++iter;
     }
    
    -extern DXXAPI DBus::MessageIter &operator >> (DBus::MessageIter &iter, DBus::Variant &val);
    +template <typename T>
    +inline DBus::Variant::operator T() const
    +{
    +	T cast;
    +	DBus::MessageIter ri = _msg.reader();
    +	ri >> cast;
    +	return cast;
    +}
    +
    
     #endif//__DBUSXX_TYPES_H