meta icon indicating copy to clipboard operation
meta copied to clipboard

Concepts and meta::lambda

Open CaseyCarter opened this issue 6 years ago • 1 comments

There are issues in the interaction between the concept constraints in meta and the lambda implementation that need to be investigated. Concepts are applied when forming a template-id, even before instantiation, so e.g.:

template<class> concept Foo = false;
template<Foo T> struct X;
using U = X<int>; // ill-formed despite not instantiating X<int>

Yet the implementation of lambdas relies on the ability to name "invalid" specializations which are later pattern-matched and substituted into valid specializations. GCC's concept implementation is lax enough that we've been getting by with some cheating in cmcstl2, but clang-concepts (and I suspect other implementations of C++20 concepts) refuses to compile the lambda test cases in meta.cpp.

CaseyCarter avatar Jan 14 '19 17:01 CaseyCarter

Working my way down meta.cpp, on line 67 (the last type alias (outer) in Res tuple_cat(Tuples &&... tpls)): quote_i<std::size_t, make_index_sequence> fails Invocable (in a static_assert). quote<std::index_sequence_for> as a replacement works (not a good solution, but at least allows me down to the lambda tests).

kedarbhat avatar Jan 15 '19 05:01 kedarbhat