c++: explicit ctor and list-initialization [PR109159]
When I implemented explicit(bool) in r9-3735, I added this code to add_template_candidate_real: + /* Now the explicit specifier might have been deduced; check if this + declaration is explicit. If it is and we're ignoring non-converting + constructors, don't add this function to the set of candidates. */ + if ((flags & LOOKUP_ONLYCONVERTING) && DECL_NONCONVERTING_P (fn)) + return NULL; but as this test demonstrates, that's incorrect when we're initializing from a {}: for list-initialization we consider explicit constructors and complain if one is chosen. PR c++/109159 gcc/cp/ChangeLog: * call.cc (add_template_candidate_real): Add explicit decls to the set of candidates when the initializer is a braced-init-list. libstdc++-v3/ChangeLog: * testsuite/20_util/pair/cons/explicit_construct.cc: Adjust dg-error. * testsuite/20_util/tuple/cons/explicit_construct.cc: Likewise. * testsuite/23_containers/span/explicit.cc: Likewise. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/explicit16.C: New test.
Showing
- gcc/cp/call.cc 3 additions, 1 deletiongcc/cp/call.cc
- gcc/testsuite/g++.dg/cpp0x/explicit16.C 18 additions, 0 deletionsgcc/testsuite/g++.dg/cpp0x/explicit16.C
- libstdc++-v3/testsuite/20_util/pair/cons/explicit_construct.cc 5 additions, 5 deletions...dc++-v3/testsuite/20_util/pair/cons/explicit_construct.cc
- libstdc++-v3/testsuite/20_util/tuple/cons/explicit_construct.cc 29 additions, 29 deletions...c++-v3/testsuite/20_util/tuple/cons/explicit_construct.cc
- libstdc++-v3/testsuite/23_containers/span/explicit.cc 2 additions, 2 deletionslibstdc++-v3/testsuite/23_containers/span/explicit.cc
Loading
Please register or sign in to comment