On 11/17/25 8:09 PM, Marek Polacek wrote:
On Mon, Nov 17, 2025 at 01:01:14PM +0100, Jakub Jelinek wrote:
Hi!
Working virtually out of Baker Island.
The following patch attempts to implement CWG1670.
Tested on x86_64-linux, ok for trunk?
2025-11-17 Jakub Jelinek <[email protected]>
gcc/cp/
* parser.cc (cp_parser_conversion_type_id): Implement C++ DR1670
- auto as conversion-type-id. Pedwarn on conversion operators
with placeholder return type.
gcc/testsuite/
* g++.dg/DRs/dr1670-1.C: New test.
* g++.dg/DRs/dr1670-2.C: New test.
* g++.dg/DRs/dr1670-3.C: New test.
* g++.dg/modules/auto-1_a.H: Use dg-options instead of
dg-additional-options.
* g++.dg/modules/auto-1_b.C: Likewise.
* g++.dg/cpp1y/auto-fn12.C: Likewise.
* g++.dg/cpp1y/auto-fn13.C: Add empty dg-options.
* g++.dg/cpp1y/auto-fn22.C: Likewise.
* g++.dg/cpp1y/constexpr-assert2.C: Likewise.
* g++.dg/cpp1y/auto-fn44.C: Add dg-options -Wpedantic and expect
further warnings.
* g++.dg/cpp1y/auto-fn50.C: Likewise.
* g++.dg/cpp0x/auto9.C: Expect two errors always rather than just
for C++11.
libstdc++-v3/
* include/std/type_traits (constant_wrapper conversion operator):
Use decltype(value) instead of decltype(auto). Resolves LWG4468.
--- gcc/cp/parser.cc.jj 2025-11-15 16:03:45.587512374 +0100
+++ gcc/cp/parser.cc 2025-11-17 10:21:57.667975827 +0100
@@ -18779,9 +18779,14 @@ cp_parser_conversion_type_id (cp_parser*
error ("invalid use of %<auto%> in conversion operator");
return error_mark_node;
}
- else if (template_parm_scope_p ())
- warning (0, "use of %<auto%> in member template "
- "conversion operator can never be deduced");
+ else
+ {
I suppose auto_diagnostic_group doesn't belong here?
+ pedwarn (input_location, OPT_Wpedantic,
+ "invalid use of %<auto%> in conversion operator");
+ if (template_parm_scope_p ())
+ warning (0, "use of %<auto%> in member template "
+ "conversion operator can never be deduced");
Patch LGTM.
Agreed, OK.
Jason