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

            Bug ID: 116752
           Summary: Implementation detail leakes to <thread> header -
                    "write" func is being pulled in
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sinbal2l at gmail dot com
  Target Milestone: ---

When including <thread> header, func is leaking from implementation, which
captures the name "write":
https://godbolt.org/z/PanTaEWz6

```
#include <thread>

void write() {}

int main()
{
  write(1, v, 4);           // Works in gcc (when it shouldn't!)
  typedef void(*funcptr)();
  funcptr ptr = write;

  std::jthread t1(ptr);     // OK
  std::jthread t4(write);   // Ambiguity failure - caused by pulling the 
                            // wrong "write" to the global namespace
}
```

Fix needed: put in namespace / wrap functions in the C header to preven leak
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/thread

(Opening bug for decomentation, as I got some feedback that the bug is unlikely
to be fixed)

Reply via email to