public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/99518] New: trailing requires clause adds nonexistent reference declarator to function parameter
@ 2021-03-10 14:32 nickgray0 at brown dot edu
2021-03-10 15:46 ` [Bug c++/99518] " nickgray0 at brown dot edu
2021-03-10 15:48 ` nickgray0 at brown dot edu
0 siblings, 2 replies; 3+ messages in thread
From: nickgray0 at brown dot edu @ 2021-03-10 14:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99518
Bug ID: 99518
Summary: trailing requires clause adds nonexistent reference
declarator to function parameter
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nickgray0 at brown dot edu
Target Milestone: ---
the following code fails to compile
#include <concepts>
auto f(std::integral auto x) {}
auto g(auto x) requires requires { { x }->std::integral; } {}
auto main()->int {
f(42); // OK
g(42); // error
}
error message: In function 'int main()':
<source>:8:9: error: no matching function for call to 'g(int)'
8 | g(42); // error
| ^
<source>:4:6: note: candidate: 'template<class auto:2> auto g(auto:2) requires
requires{{g::x} -> decltype(auto) [requires std::integral<<placeholder>, >];}'
4 | auto g(auto x) requires requires { { x }->std::integral; } {}
| ^
<source>:4:6: note: template argument deduction/substitution failed:
<source>:4:6: note: constraints not satisfied
<source>: In substitution of 'template<class auto:2> auto g(auto:2) requires
requires{{x} -> decltype(auto) [requires std::integral<<placeholder>, >];}
[with auto:2 = int]':
<source>:8:9: required from here
<source>:4:6: required by the constraints of 'template<class auto:2> auto
g(auto:2) requires requires{{x} -> decltype(auto) [requires
std::integral<<placeholder>, >];}'
<source>:4:25: in requirements [with auto:2 = int]
<source>:4:38: note: 'x' does not satisfy return-type-requirement, because
4 | auto g(auto x) requires requires { { x }->std::integral; } {}
| ^
<source>:4:38: error: deduced expression type does not satisfy placeholder
constraints
4 | auto g(auto x) requires requires { { x }->std::integral; } {}
| ~~^~~~~~~~~~~~~~~~~~
<source>:4:38: note: constraints not satisfied
In file included from <source>:1:
/opt/compiler-explorer/gcc-trunk-20210310/include/c++/11.0.1/concepts:102:13:
required for the satisfaction of 'integral<decltype(auto) [requires
std::integral<<placeholder>, >]>' [with decltype(auto) [requires
std::integral<<placeholder>, >] = int&]
/opt/compiler-explorer/gcc-trunk-20210310/include/c++/11.0.1/concepts:102:24:
note: the expression 'is_integral_v<_Tp> [with _Tp = int&]' evaluated to
'false'
102 | concept integral = is_integral_v<_Tp>;
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/99518] trailing requires clause adds nonexistent reference declarator to function parameter
2021-03-10 14:32 [Bug c++/99518] New: trailing requires clause adds nonexistent reference declarator to function parameter nickgray0 at brown dot edu
@ 2021-03-10 15:46 ` nickgray0 at brown dot edu
2021-03-10 15:48 ` nickgray0 at brown dot edu
1 sibling, 0 replies; 3+ messages in thread
From: nickgray0 at brown dot edu @ 2021-03-10 15:46 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99518
--- Comment #1 from nickgray0 at brown dot edu ---
I just looked up the standard and it seems GCC is correct to reject the code
and Clang's implementation (which happily compiles the code) is incorrect. the
compound requirement requires the parenthesized expression (which in this case,
turns 'x' to int&) to satisfy the return type constraint.
Sorry for the false alarm.
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/99518] trailing requires clause adds nonexistent reference declarator to function parameter
2021-03-10 14:32 [Bug c++/99518] New: trailing requires clause adds nonexistent reference declarator to function parameter nickgray0 at brown dot edu
2021-03-10 15:46 ` [Bug c++/99518] " nickgray0 at brown dot edu
@ 2021-03-10 15:48 ` nickgray0 at brown dot edu
1 sibling, 0 replies; 3+ messages in thread
From: nickgray0 at brown dot edu @ 2021-03-10 15:48 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99518
nickgray0 at brown dot edu changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |INVALID
Status|UNCONFIRMED |RESOLVED
--- Comment #2 from nickgray0 at brown dot edu ---
closed
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-03-10 15:48 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-10 14:32 [Bug c++/99518] New: trailing requires clause adds nonexistent reference declarator to function parameter nickgray0 at brown dot edu
2021-03-10 15:46 ` [Bug c++/99518] " nickgray0 at brown dot edu
2021-03-10 15:48 ` nickgray0 at brown dot edu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).