Bug 113300 (cwg2856) - GCC rejects valid program involving copy list initialization A a = {} of a class with explicit and non explicit default constructors
Summary: GCC rejects valid program involving copy list initialization A a = {} of a cl...
Status: ASSIGNED
Alias: cwg2856
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 14.0
: P3 normal
Target Milestone: ---
Assignee: Marek Polacek
URL:
Keywords: rejects-valid
Depends on:
Blocks: c++-core-issues
  Show dependency treegraph
 
Reported: 2024-01-10 02:53 UTC by Jason Liam
Modified: 2024-04-30 15:06 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2024-01-10 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jason Liam 2024-01-10 02:53:30 UTC
The following valid program is rejected by gcc and clang but accepted by msvc. https://godbolt.org/z/Y3x8nP11M

```
struct A
{
  explicit A(int = 10);
  A()= default;
};

A a = {}; //msvc ok but gcc and clang fails here

```
GCC says:

```
<source>:8:8: error: conversion from '<brace-enclosed initializer list>' to 'A' is ambiguous
    8 | A a = {}; //msvc ok but gcc and clang fails here
      |        ^
<source>:5:3: note: candidate: 'constexpr A::A()'
    5 |   A()= default;
      |   ^
<source>:4:12: note: candidate: 'A::A(int)'
    4 |   explicit A(int = 10);
```
The reason why this is valid is discussed here: https://stackoverflow.com/questions/77788861/ambiguous-constructor-error-in-gcc-but-not-in-msvc
Comment 1 Andrew Pinski 2024-01-10 02:55:11 UTC
There is a C++ defect report in this area even ...
Comment 2 Andrew Pinski 2024-01-10 02:56:48 UTC
https://wg21.link/cwg1228
Comment 3 Jason Liam 2024-01-10 02:59:55 UTC
(In reply to Andrew Pinski from comment #1)
> There is a C++ defect report in this area even ...

Can you post a link to the DR that you're referencing? Or are you referring to this https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0398r0.html
Comment 4 Jason Liam 2024-01-10 03:03:24 UTC
(In reply to Andrew Pinski from comment #1)
> There is a C++ defect report in this area even ...

Looks like that gcc and clang are non-compliant here as per this discussion in CWG issue list: https://github.com/cplusplus/CWG/issues/486 

Also, the cwg 1228 is categorised as NAD. https://wg21.link/cwg1228 so this(that the program should compile) looks intentional.
Comment 5 Marek Polacek 2024-01-30 16:15:46 UTC
Not a regression so I think it has to wait until GCC 15.  I'd like to take a look then.

I've updated https://gcc.gnu.org/projects/cxx-dr-status.html
Comment 6 Marek Polacek 2024-04-23 22:34:31 UTC
This is CWG 2856 https://cplusplus.github.io/CWG/issues/2856.html