[SRU] /usr/include/glibmm-2.4/glibmm/variant.h:956:24: error: expected unqualified-id before ‘)’ token (with GCC 11 in C++20 mode)

Bug #1955044 reported by Nicholas Guriev
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
glibmm2.4 (Ubuntu)
Fix Released
Medium
Unassigned
Impish
Won't Fix
Medium
Unassigned

Bug Description

Impact
======
It's not possible to build using the <glibmm.h> header under C++20 with the default compiler, GCC 11. This is interfering with being able to build telegram-desktop.

This was fixed for Ubuntu 22.04 LTS with 2.66.1

Demonstration of the Issue
==========================
$ g++ -x c++ -std=gnu++20 -include glibmm.h - <<< 'int main(){}' `pkg-config --cflags --libs glibmm-2.4` -o /dev/null
In file included from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:23,
                 from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:21,
                 from /usr/include/glibmm-2.4/glibmm.h:92,
                 from <command-line>:
/usr/include/glibmm-2.4/glibmm/variant.h:956:24: error: expected unqualified-id before ‘)’ token
  956 | Variant<VariantBase>();
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1017:25: error: expected unqualified-id before ‘)’ token
 1017 | Variant< Variant<T> >();
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1070:26: error: expected unqualified-id before ‘)’ token
 1070 | Variant<Glib::ustring>();
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1240:24: error: expected unqualified-id before ‘)’ token
 1240 | Variant<std::string>();
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1286:30: error: expected unqualified-id before ‘)’ token
 1286 | Variant< std::pair<K, V> >()
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1335:29: error: expected unqualified-id before ‘)’ token
 1335 | Variant< std::vector<T> >()
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1404:41: error: expected unqualified-id before ‘)’ token
 1404 | Variant< std::vector<Glib::ustring> >();
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1530:39: error: expected unqualified-id before ‘)’ token
 1530 | Variant< std::vector<std::string> >();
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1606:29: error: expected unqualified-id before ‘)’ token
 1606 | Variant< std::map<K, V> >()
      | ^
/usr/include/glibmm-2.4/glibmm/variant.h:1679:33: error: expected unqualified-id before ‘)’ token
 1679 | Variant<std::tuple<Types...>>()
      | ^
In file included from /usr/include/glibmm-2.4/glibmm/variant.h:1742,
                 from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:23,
                 from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:21,
                 from /usr/include/glibmm-2.4/glibmm.h:92,
                 from <command-line>:
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:23:17: error: expected unqualified-id before ‘)’ token
   23 | Variant<bool>()
      | ^
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:66:26: error: expected unqualified-id before ‘)’ token
   66 | Variant<unsigned char>()
      | ^
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:109:19: error: expected unqualified-id before ‘)’ token
  109 | Variant<gint16>()
      | ^
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:152:20: error: expected unqualified-id before ‘)’ token
  152 | Variant<guint16>()
      | ^
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:195:19: error: expected unqualified-id before ‘)’ token
  195 | Variant<gint32>()
      | ^
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:244:20: error: expected unqualified-id before ‘)’ token
  244 | Variant<guint32>()
      | ^
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:287:19: error: expected unqualified-id before ‘)’ token
  287 | Variant<gint64>()
      | ^
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:330:20: error: expected unqualified-id before ‘)’ token
  330 | Variant<guint64>()
      | ^
/usr/include/glibmm-2.4/glibmm/variant_basictypes.h:373:19: error: expected unqualified-id before ‘)’ token
  373 | Variant<double>()
      | ^
In file included from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:23,
                 from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:21,
                 from /usr/include/glibmm-2.4/glibmm.h:92,
                 from <command-line>:
/usr/include/glibmm-2.4/glibmm/variant.h:1751:1: error: no declaration matches ‘Glib::Variant<Glib::Variant<T> >::Variant()’
 1751 | Variant< Variant<T> >::Variant()
      | ^~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:23,
                 from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:21,
                 from /usr/include/glibmm-2.4/glibmm.h:92,
                 from <command-line>:
/usr/include/glibmm-2.4/glibmm/variant.h:1026:12: note: candidate is: ‘Glib::Variant<Glib::Variant<T> >::Variant(GVariant*, bool)’
 1026 | explicit Variant< Variant<T> >(GVariant* castitem, bool take_a_reference = false);
      | ^~~~~~~~~~~~~~~~~~~~~
/usr/include/glibmm-2.4/glibmm/variant.h:1009:7: note: ‘class Glib::Variant<Glib::Variant<T> >’ defined here
 1009 | class Variant< Variant<T> > : public VariantContainerBase
      | ^~~~~~~~~~~~~~~~~~~~~

Test Plan
=========
Run the following two terminal commands in Bash:
1. sudo apt-get satisfy libglibmm-2.4-dev 'build-essential | g++'
2. g++ -x c++ -std=gnu++20 -include glibmm.h - <<< 'int main(){}' `pkg-config --cflags --libs glibmm-2.4` -o /dev/null

Make sure the latter command produced no output and ended with zero exit code.

Where problems could occur
===========================
The proposed patch only modifies C++ headers. It may affect only building other packages from source or developer experience.

Revision history for this message
Nicholas Guriev (mymedia) wrote :

This is already fixed in upstream. Please apply their patch.
https://gitlab.gnome.org/GNOME/glibmm/-/merge_requests/50/diffs

Revision history for this message
Nicholas Guriev (mymedia) wrote :
Revision history for this message
Ubuntu Foundations Team Bug Bot (crichton) wrote :

The attachment "glibmm2.4_2.64.2-2ubuntu0.1.debdiff" seems to be a debdiff. The ubuntu-sponsors team has been subscribed to the bug report so that they can review and hopefully sponsor the debdiff. If the attachment isn't a patch, please remove the "patch" flag from the attachment, remove the "patch" tag, and if you are member of the ~ubuntu-sponsors, unsubscribe the team.

[This is an automated message performed by a Launchpad user owned by ~brian-murray, for any issue please contact him.]

tags: added: patch
description: updated
summary: - /usr/include/glibmm-2.4/glibmm/variant.h:956:24: error: expected
+ [SRU] /usr/include/glibmm-2.4/glibmm/variant.h:956:24: error: expected
unqualified-id before ‘)’ token
description: updated
summary: [SRU] /usr/include/glibmm-2.4/glibmm/variant.h:956:24: error: expected
- unqualified-id before ‘)’ token
+ unqualified-id before ‘)’ token (with GCC 11 in C++20 mode)
Jeremy Bícha (jbicha)
Changed in glibmm2.4 (Ubuntu):
status: New → Fix Released
Changed in glibmm2.4 (Ubuntu Impish):
status: New → Triaged
description: updated
Mathew Hodson (mhodson)
Changed in glibmm2.4 (Ubuntu):
importance: Undecided → Medium
Changed in glibmm2.4 (Ubuntu Impish):
importance: Undecided → Medium
Jeremy Bícha (jbicha)
Changed in glibmm2.4 (Ubuntu Impish):
status: Triaged → In Progress
Revision history for this message
Jeremy Bícha (jbicha) wrote :

I apologize but this upload didn't make it into Ubuntu 21.10 before it reached end of life this week. This bug was fixed for Ubuntu 22.04 LTS though.

Changed in glibmm2.4 (Ubuntu Impish):
status: In Progress → Won't Fix
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.