https://gitlab.gnome.org/GNOME/glibmm/-/merge_requests/50 https://bugzilla.redhat.com/show_bug.cgi?id=1947838 Resolves: #1951127 (cherry picked from Fedora commit fdd8d944ad287e27a6f6c65429946e3ed16582e7)
237 lines
7.2 KiB
Diff
237 lines
7.2 KiB
Diff
From f40371dae96ae340b752a985621598439f09ad40 Mon Sep 17 00:00:00 2001
|
|
From: Magne Oestlyngen <magne@spacetec.no>
|
|
Date: Tue, 6 Apr 2021 14:59:16 +0200
|
|
Subject: [PATCH] Variant: Fix so it works with C++20
|
|
|
|
C++20 changed some aspects of templates that broke variant.h on
|
|
some compilers (GCC 11).
|
|
|
|
Ref: https://wg21.cmeerw.net/cwg/issue2237
|
|
|
|
template<class T>
|
|
struct A {
|
|
A<T>(); // ok pre-C++20, now incorrect
|
|
// A(); // correct for all versions
|
|
};
|
|
|
|
This commit removes the "simple-template-id" from both the default
|
|
constructor (no args) and the explicit constructor (has args), even
|
|
though only the default constructor currently gives error on GCC 11.
|
|
Since both versions are wrong according to the issue referred to above
|
|
it is expected that GCC (and possibly other compilers) will be updated
|
|
to fail on both cases in the future.
|
|
---
|
|
glib/src/variant.hg | 40 ++++++++++++++++----------------
|
|
glib/src/variant_basictypes.h.m4 | 4 ++--
|
|
2 files changed, 22 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/glib/src/variant.hg b/glib/src/variant.hg
|
|
index 807e52ef..011aa994 100644
|
|
--- a/glib/src/variant.hg
|
|
+++ b/glib/src/variant.hg
|
|
@@ -470,7 +470,7 @@ public:
|
|
using CppContainerType = Variant<VariantBase>;
|
|
|
|
/// Default constructor.
|
|
- Variant<VariantBase>();
|
|
+ Variant();
|
|
|
|
/** GVariant constructor.
|
|
* @param castitem The GVariant to wrap.
|
|
@@ -478,7 +478,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant<VariantBase>(GVariant* castitem, bool take_a_reference = false);
|
|
+ explicit Variant(GVariant* castitem, bool take_a_reference = false);
|
|
|
|
/** Gets the VariantType.
|
|
* @return The VariantType.
|
|
@@ -521,7 +521,7 @@ public:
|
|
using CppContainerType = Variant<CppType>;
|
|
|
|
/// Default constructor.
|
|
- Variant< Variant<T> >();
|
|
+ Variant();
|
|
|
|
/** GVariant constructor.
|
|
* @param castitem The GVariant to wrap.
|
|
@@ -530,7 +530,7 @@ public:
|
|
* wrapper).
|
|
* @newin{2,36}
|
|
*/
|
|
- explicit Variant< Variant<T> >(GVariant* castitem, bool take_a_reference = false);
|
|
+ explicit Variant(GVariant* castitem, bool take_a_reference = false);
|
|
|
|
/** Gets the VariantType.
|
|
* @return The VariantType.
|
|
@@ -567,7 +567,7 @@ public:
|
|
using CppType = Glib::ustring;
|
|
|
|
/// Default constructor.
|
|
- Variant<Glib::ustring>();
|
|
+ Variant();
|
|
|
|
/** GVariant constructor.
|
|
* @param castitem The GVariant to wrap.
|
|
@@ -575,7 +575,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant<Glib::ustring>(GVariant* castitem, bool take_a_reference = false);
|
|
+ explicit Variant(GVariant* castitem, bool take_a_reference = false);
|
|
|
|
/** Gets the VariantType.
|
|
* @return The VariantType.
|
|
@@ -711,7 +711,7 @@ public:
|
|
using CppType = std::string;
|
|
|
|
/// Default constructor.
|
|
- Variant<std::string>();
|
|
+ Variant();
|
|
|
|
/** GVariant constructor.
|
|
* @param castitem The GVariant to wrap.
|
|
@@ -719,7 +719,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant<std::string>(GVariant* castitem, bool take_a_reference = false);
|
|
+ explicit Variant(GVariant* castitem, bool take_a_reference = false);
|
|
|
|
/** Gets the VariantType.
|
|
* @return The VariantType.
|
|
@@ -756,7 +756,7 @@ public:
|
|
using CppContainerType = Variant<CppType>;
|
|
|
|
/// Default constructor.
|
|
- Variant< std::pair<K, V> >()
|
|
+ Variant()
|
|
: VariantContainerBase()
|
|
{}
|
|
|
|
@@ -766,7 +766,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant< std::pair<K, V> >(GVariant* castitem,
|
|
+ explicit Variant(GVariant* castitem,
|
|
bool take_a_reference = false)
|
|
: VariantContainerBase(castitem, take_a_reference)
|
|
{}
|
|
@@ -805,7 +805,7 @@ public:
|
|
using CppContainerType = std::vector<T>;
|
|
|
|
/// Default constructor.
|
|
- Variant< std::vector<T> >()
|
|
+ Variant()
|
|
: VariantContainerBase()
|
|
{}
|
|
|
|
@@ -815,7 +815,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant< std::vector<T> >(GVariant* castitem,
|
|
+ explicit Variant(GVariant* castitem,
|
|
bool take_a_reference = false)
|
|
: VariantContainerBase(castitem, take_a_reference)
|
|
{}
|
|
@@ -874,7 +874,7 @@ public:
|
|
using CppContainerType = std::vector<Glib::ustring>;
|
|
|
|
/// Default constructor.
|
|
- Variant< std::vector<Glib::ustring> >();
|
|
+ Variant();
|
|
|
|
/** GVariant constructor.
|
|
* @param castitem The GVariant to wrap.
|
|
@@ -882,7 +882,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant< std::vector<Glib::ustring> >(GVariant* castitem, bool take_a_reference = false);
|
|
+ explicit Variant(GVariant* castitem, bool take_a_reference = false);
|
|
|
|
/** Gets the VariantType.
|
|
* @return The VariantType.
|
|
@@ -1000,7 +1000,7 @@ public:
|
|
using CppContainerType = std::vector<std::string>;
|
|
|
|
/// Default constructor.
|
|
- Variant< std::vector<std::string> >();
|
|
+ Variant();
|
|
|
|
/** GVariant constructor.
|
|
* @param castitem The GVariant to wrap.
|
|
@@ -1008,7 +1008,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant< std::vector<std::string> >(GVariant* castitem, bool take_a_reference = false);
|
|
+ explicit Variant(GVariant* castitem, bool take_a_reference = false);
|
|
|
|
/** Gets the VariantType.
|
|
* @return The VariantType.
|
|
@@ -1076,7 +1076,7 @@ public:
|
|
using CppContainerType = std::map<K, V>;
|
|
|
|
/// Default constructor.
|
|
- Variant< std::map<K, V> >()
|
|
+ Variant()
|
|
: VariantContainerBase()
|
|
{}
|
|
|
|
@@ -1086,7 +1086,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant< std::map<K, V> >(GVariant* castitem,
|
|
+ explicit Variant(GVariant* castitem,
|
|
bool take_a_reference = false)
|
|
: VariantContainerBase(castitem, take_a_reference)
|
|
{}
|
|
@@ -1149,7 +1149,7 @@ public:
|
|
using CppContainerType = std::tuple<Types...>;
|
|
|
|
/// Default constructor
|
|
- Variant<std::tuple<Types...>>()
|
|
+ Variant()
|
|
: VariantContainerBase()
|
|
{}
|
|
|
|
@@ -1158,7 +1158,7 @@ public:
|
|
* @param take_a_reference Whether to take an extra reference of the GVariant
|
|
* or not (not taking one could destroy the GVariant with the wrapper).
|
|
*/
|
|
- explicit Variant<std::tuple<Types...>>(GVariant* castitem, bool take_a_reference = false)
|
|
+ explicit Variant(GVariant* castitem, bool take_a_reference = false)
|
|
: VariantContainerBase(castitem, take_a_reference)
|
|
{}
|
|
|
|
diff --git a/glib/src/variant_basictypes.h.m4 b/glib/src/variant_basictypes.h.m4
|
|
index 199295b9..f73992fd 100644
|
|
--- a/glib/src/variant_basictypes.h.m4
|
|
+++ b/glib/src/variant_basictypes.h.m4
|
|
@@ -45,7 +45,7 @@ public:
|
|
using CType = $2;
|
|
|
|
/// Default constructor.
|
|
- Variant<$1>()
|
|
+ Variant()
|
|
: VariantBase()
|
|
{}
|
|
|
|
@@ -55,7 +55,7 @@ public:
|
|
* GVariant or not (not taking one could destroy the GVariant with the
|
|
* wrapper).
|
|
*/
|
|
- explicit Variant<$1>(GVariant* castitem, bool take_a_reference = false)
|
|
+ explicit Variant(GVariant* castitem, bool take_a_reference = false)
|
|
: VariantBase(castitem, take_a_reference)
|
|
{}
|
|
|
|
--
|
|
2.30.2
|
|
|