Здравствуйте, qadmium, Вы писали:
Q>auto NumElements = []<int N>(auto (&a)[N]) { return N; };
Q>назовите синтаксическую конструкцию в котрой используются все виды скобочек доступных в c++...
Теперь допустимым C++-кодом будет не только [](){}(), но и []<>(){}()?
Здравствуйте, CreatorCray, Вы писали:
CC>А как у него с качеством генерируемого кода?
FreeBSD и Mac OS X собираются при помощи Clang. Так что, видимо, хорошо В то же время, судя по периодически выходящим тестам, генерируемый код будет несколько проигрывать GCC по скорости.
Но любят Clang не за это, а за его модульность, расширяемость, скорость работы, качество диагноститической информации об ошибках и лицензию.
А какой тип скрывается за этими auto?
Или это непервоклассная сущность, которая в каждой точке подстановки превращается в функцию (сишную или std::function) нужного типа?
Что тогда происходит с захватом контекста?
int x = 123;
auto f = [x](auto y) { std::cout << x << " " << y << std::endl; }; // x - по значению
f(1); // 123 1
x = 456;
f(2); // 123 2 или 456 2 - т.е. мы пересоздали функцию или воспользовались старым экземпляром?
f(3.4); // 123 3.4 или 456 3.4 - т.е. мы создали функцию прямо сейчас или захватили контекст предварительно?
Здравствуйте, Кодт, Вы писали:
К>А какой тип скрывается за этими auto? К>Или это непервоклассная сущность, которая в каждой точке подстановки превращается в функцию (сишную или std::function) нужного типа? К>Что тогда происходит с захватом контекста?
Имхо, единственным правильным решением будет реализовывать такие лямбды как обычные функторы, но с шаблонным оператором().
Т.е. захват будет один (и будет членом функтора).
Заодно ими можно будет гулять по гетерогенным структурам типа boost::fusion::vector, boost/std::tuple, boost::variant.
По крайней мере, я такие писал всегда руками, и все замечательно работало (см. мою старую статью http://rsdn.ru/forum/cpp/2899831.1
ЗЫ Лямбды уже сейчас реализуются как функторы, так что это довольно маленькое изменение, единственное, что нужно, — разрешить локальным классам иметь шаблонные члены. (Это просто следующий шаг после уже сделанного для обычных лямбд — разрешили инстанцировать шаблоны локальными классами)