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

            Bug ID: 66834
           Summary: [concepts] concept parameter kind mismatch causes hard
                    error
           Product: gcc
           Version: c++-concepts
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: eric.niebler at gmail dot com
  Target Milestone: ---

Before rev 225651 (the fix for #66758), the following worked. It no longer
does. Not sure if it's legit.

template <class From, class To>
concept bool ExplicitlyConvertible =
  requires (From&& f) {
    static_cast<To>((From&&)f);
  };

template <class T, class... Args>
concept bool Constructible =
  ExplicitlyConvertible<Args..., T> ||
  requires (Args&&... args) {
    T{((Args&&)(args))...};
  };

template <class T, class...Args>
constexpr bool constructible() { return false; }

Constructible{T, ...Args}
constexpr bool constructible() { return false; }

int main() {}


Yields:

/cygdrive/c/Users/eric/Code/cmcstl2/test/iterator.cpp: In function ‘constexpr
bool Constructible()’:
/cygdrive/c/Users/eric/Code/cmcstl2/test/iterator.cpp:9:5: error: pack
expansion argument for non-pack parameter ‘From’ of concept ‘template
<class From, class To> constexpr const bool ExplicitlyConvertible<From, To>’
     ExplicitlyConvertible<Args..., T> ||
     ^
/cygdrive/c/Users/eric/Code/cmcstl2/test/iterator.cpp:1:11: note: declared here
 template< class From, class To >
           ^

Reply via email to