https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96922

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2020-09-03
           Keywords|                            |rejects-valid
          Component|libstdc++                   |c++
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This is nothing to do with libstdc++, changing component to c++.

Reduced:

template<typename...> struct trait { static constexpr bool value = true; };

// Not working for concepts with variadic templates
template <typename t, typename ...args_t>
concept constructible_from = trait<t, args_t...>::value;

template <typename t>
    requires (constructible_from<t>) // does not work with parenthesis
void foo();

template <typename t>
    requires constructible_from<t> // works without parenthesis
void bar();

// Working without variadic templates
template <typename t, typename u>
concept constructible_from_one = trait<t, u>::value;

template <typename t>
    requires (constructible_from_one<t, t>) 
void foo();

Compiles with -std=c++20 but not -std=c++17 -fconcepts

I don't see anything in the Concepts TS grammar which would make this invalid.

Reply via email to