Skip to content

gcc 16 build error #1747

@prlw1

Description

@prlw1

Trying to compile the following

#include <stdexec/execution.hpp>
#include <print>

int main() {
        std::println("hello stdexec");
}

with 71d22ca stdexec and gcc 16, I see

#   compile  commabug/commabug.o
/usr/local/gcc/bin/g++  -O2 -fPIE -g -Werror -std=c++26     -I/usr/src/local/stdexec/include  -c    commabug.cc
In file included from /usr/src/local/stdexec/include/stdexec/__detail/__bulk.hpp:28,
                 from /usr/src/local/stdexec/include/stdexec/execution.hpp:23,
                 from commabug.cc:1:
/usr/src/local/stdexec/include/stdexec/__detail/__senders.hpp:159:50: error: omission of ',' before varargs '...' is deprecated in C++26 [-Werror=deprecated-variadic-comma-omission]
  159 |       constexpr auto operator()(_Sender&&, _Env&&...) const noexcept
      |                                                  ^~~
      |                                                  , 
In file included from /usr/src/local/stdexec/include/stdexec/execution.hpp:39:
/usr/src/local/stdexec/include/stdexec/__detail/__let.hpp:616:52: error: omission of ',' before varargs '...' is deprecated in C++26 [-Werror=deprecated-variadic-comma-omission]
  616 |         []<class _Self, class _Env>(_Self&&, _Env&&...) noexcept {
      |                                                    ^~~
      |                                                    , 
cc1plus: all warnings being treated as errors
*** Error code 1

If I simply do as it says and apply

diff --git a/include/stdexec/__detail/__let.hpp b/include/stdexec/__detail/__let.hpp
index 9d40410f..fca43433 100644
--- a/include/stdexec/__detail/__let.hpp
+++ b/include/stdexec/__detail/__let.hpp
@@ -613,7 +613,7 @@ namespace stdexec {
         };
 
       static constexpr auto get_completion_signatures =
-        []<class _Self, class _Env>(_Self&&, _Env&&...) noexcept {
+        []<class _Self, class _Env>(_Self&&, _Env&&, ...) noexcept {
           static_assert(sender_expr_for<_Self, __let_tag<_SetTag>>);
           if constexpr (__decay_copyable<_Self>) {
             using __fn_t = __decay_t<__fun_of<_Self>>;
diff --git a/include/stdexec/__detail/__senders.hpp b/include/stdexec/__detail/__senders.hpp
index 87f1cf81..75ac6e6b 100644
--- a/include/stdexec/__detail/__senders.hpp
+++ b/include/stdexec/__detail/__senders.hpp
@@ -156,7 +156,7 @@ namespace stdexec {
         requires __callable<__mtypeof<_DeclFn>>
               || __with_legacy_tag_invoke<__tfx_sender<_Sender, _Env>, _Env>
       [[deprecated("the use of tag_invoke for get_completion_signatures is deprecated")]]
-      constexpr auto operator()(_Sender&&, _Env&&...) const noexcept
+      constexpr auto operator()(_Sender&&, _Env&&, ...) const noexcept
         -> tag_invoke_result_t<get_completion_signatures_t, __tfx_sender<_Sender, _Env>, _Env> {
         return {};
       }

then it compiles successfully.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions