[Bug c++/115727] New: gcc allows implicit usage of explicit constructor in "std::initializer_list"
rush102333 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Jul 1 08:57:11 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115727
Bug ID: 115727
Summary: gcc allows implicit usage of explicit constructor in
"std::initializer_list"
Product: gcc
Version: 13.2.0
Status: UNCONFIRMED
Keywords: accepts-invalid
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: rush102333 at gmail dot com
Target Milestone: ---
In the following test case, the ctor of class "S" is declared explicit, so
expression like "S s=0" or "S s={0}" is forbidden. But when it's used as a
parameter in direct initialization of a std::initializer_list variable, the "S
s=0" form is accepted by gcc-13.2:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <initializer_list>
struct S { explicit S(int) { }};
int main() {
//reject
//std::initializer_list<S> ss={42};
//reject
//std::initializer_list<S> ss={{42}};
//reject
//std::initializer_list<S> ss({{42}});
//accept
std::initializer_list<S> ss({42});
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Clang rejects the code anyway.
Please check https://godbolt.org/z/EbE6GPnda.
More information about the Gcc-bugs
mailing list