https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109247
Bug ID: 109247
Summary: [13 Regression] error: converting to
‘optional<WebCore::SourceBrush::Brush>’ from
initializer list would use explicit constructor
‘optional<_Tp>::optional(_Up) [with _Up = int; _Tp =
WebCore::SourceBrush::Brush]’ since
r13-6765-ga226590fefb35ed6
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: marxin at gcc dot gnu.org
CC: mpolacek at gcc dot gnu.org
Target Milestone: ---
The following is reduced from webkit2gtk3:gtk3 package:
$ cat webcore13.ii
template <typename _Tp> struct optional {
template <typename _Up> explicit optional(_Up);
template <typename _Up = _Tp> void operator=(_Up);
};
namespace WebCore {
int setPattern_pattern;
struct SourceBrush {
struct Brush {
int brush;
};
void setPattern() { m_brush = {setPattern_pattern}; }
optional<Brush> m_brush;
};
} // namespace WebCore
$ clang++ webcore13.ii -c && g++-12 webcore13.ii -c
$ g++ webcore13.ii -c
webcore13.ii: In member function ‘void WebCore::SourceBrush::setPattern()’:
webcore13.ii:11:52: error: converting to
‘optional<WebCore::SourceBrush::Brush>’ from initializer list would use
explicit constructor ‘optional<_Tp>::optional(_Up) [with _Up = int; _Tp =
WebCore::SourceBrush::Brush]’
11 | void setPattern() { m_brush = {setPattern_pattern}; }
| ^