https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66712
Bug ID: 66712 Summary: [concepts] variadic concepts cause havoc 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: --- template <class T, class...Args> concept bool _Constructible_ = requires (Args&&...args) { T{ ((Args&&)(args))... }; }; template <class T, class...Args> constexpr bool _constructible_() { return false; } _Constructible_{T, ...Args...} constexpr bool _constructible_() { return true; } struct S { S(int, char const *); }; int main() { static_assert(_constructible_<S, int, char const *>(), ""); } Result: temp.cpp: In function ‘int main()’: temp.cpp:22:55: internal compiler error: tree check: expected record_type or union_type or qual_union_type, have template_type_parm in lookup_base, at cp/search.c:224 static_assert(_constructible_<S, int, char const *>(), ""); ^ temp.cpp:22:55: internal compiler error: Aborted g++: internal compiler error: Aborted (program cc1plus) Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. The trouble with variadic concepts is a blocker for STL2.