[clang] [MS][clang] Make sure vector deleting dtor calls correct operator delete (PR #133950)

Devon Loehr via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 8 12:51:16 PDT 2025


DKLoehr wrote:

This is the smallest reproduction I could find:
```
struct BaseDelete1 {
  void operator delete[](void *);
};
struct BaseDelete2 {
  void operator delete[](void *);
};
struct BaseDestructor {
  virtual ~BaseDestructor() = default;
};
struct Final : BaseDelete1, BaseDelete2, BaseDestructor {};
```

When run with `clang++ repro.cc -fsyntax-only -std=c++20`, it yields the following error. Removing any one of the three base classes causes it to compile without problems.

```
repro.cc:10:8: error: member 'operator delete[]' found in multiple base classes of different types
   10 | struct Final : BaseDelete1, BaseDelete2, BaseDestructor {};
      |        ^
repro.cc:10:8: note: in implicit destructor for 'Final' first required here
repro.cc:2:8: note: member found by ambiguous name lookup
    2 |   void operator delete[](void *);
      |        ^
repro.cc:5:8: note: member found by ambiguous name lookup
    5 |   void operator delete[](void *);
      |        ^
```

https://github.com/llvm/llvm-project/pull/133950


More information about the cfe-commits mailing list