Compilation fails on GCC 15 / wxWidgets 3.2.4+ due to ambiguous overload #1212

Open
opened 2026-04-05 17:01:26 +02:00 by MrUnknownDE · 0 comments
Owner

Originally created by @TheCrabe on 1/1/2026

Description

OrcaSlicer fails to compile on systems with GCC 15 and wxWidgets 3.2.4+ due to ambiguous overload resolution when using brace-enclosed initializer lists.

Error

src/slic3r/GUI/PhysicalPrinterDialog.cpp:377:27: error: call of overloaded 'set_values(<brace-enclosed initializer list>)' is ambiguous
  377 |         choice->set_values({ m_config->opt_string("printhost_port") });
      |         ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
note: candidate 1: 'void Slic3r::GUI::Choice::set_values(const std::vector<std::string>&)'
note: candidate 2: 'void Slic3r::GUI::Choice::set_values(const wxArrayString&)'

Similar errors occur in Plater.cpp with load_files().

Root Cause

wxWidgets 3.2.4 introduced initializer list constructors for wxArrayString, creating ambiguity when the compiler must choose between std::vector<T> and wxArrayString for brace-enclosed initializer lists.

Environment

  • OS: Arch Linux
  • Compiler: GCC 15.2.1
  • wxWidgets: 3.2.9

Solution

Explicitly specify std::vector types instead of relying on implicit conversion from initializer lists.

Reference

This is the same issue that was fixed in PrusaSlicer:

*Originally created by @TheCrabe on 1/1/2026* ## Description OrcaSlicer fails to compile on systems with GCC 15 and wxWidgets 3.2.4+ due to ambiguous overload resolution when using brace-enclosed initializer lists. ## Error ``` src/slic3r/GUI/PhysicalPrinterDialog.cpp:377:27: error: call of overloaded 'set_values(<brace-enclosed initializer list>)' is ambiguous 377 | choice->set_values({ m_config->opt_string("printhost_port") }); | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note: candidate 1: 'void Slic3r::GUI::Choice::set_values(const std::vector<std::string>&)' note: candidate 2: 'void Slic3r::GUI::Choice::set_values(const wxArrayString&)' ``` Similar errors occur in `Plater.cpp` with `load_files()`. ## Root Cause wxWidgets 3.2.4 introduced initializer list constructors for `wxArrayString`, creating ambiguity when the compiler must choose between `std::vector<T>` and `wxArrayString` for brace-enclosed initializer lists. ## Environment - **OS**: Arch Linux - **Compiler**: GCC 15.2.1 - **wxWidgets**: 3.2.9 ## Solution Explicitly specify `std::vector` types instead of relying on implicit conversion from initializer lists. ## Reference This is the same issue that was fixed in PrusaSlicer: - Issue: https://github.com/prusa3d/PrusaSlicer/issues/11768 - Fix: https://github.com/prusa3d/PrusaSlicer/pull/11769
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/OrcaSlicer#1212