https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119486

            Bug ID: 119486
           Summary: CTAD for std::pair from function lvalue results in
                    hard error since C++20
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: de34 at live dot cn
  Target Milestone: ---

When using GCC w/ libstdc++, the following example is accepted in C++17 but
rejected in C++20.

Curiously, Clang w/ libstdc++ rejects even in C++17.

https://godbolt.org/z/o5KPecMs5

```
#include <type_traits>
#include <utility>

void fun() {}

static_assert(std::is_same_v<decltype(std::pair(fun, fun)),
std::pair<void(*)(), void(*)()>>);
```

It seems to me that the implicit deduction guide should be excluded by SFINAE
before instantiation, while the decaying explicit deduction guide should work.

MSVC STL seems to be correct here.

Related libc++ issue: https://github.com/llvm/llvm-project/issues/133056

Reply via email to