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).