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
|
||
|
|