- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
std::function<int()> gl()
{
int a=0;
return [=]()mutable{return a++;};
}
int main()
{
auto a=gl();
cout
<<a()
<<endl
<<a()
<<endl
<<a()
<<endl
<<a();
return 0;
}
http://liveworkspace.org/code/441e8526a26e2b0cf8842ac4f2f92923
Результат конечно же неимоверно радует:
Думаю этот говнокод в одном из следующих бустов пофиксят.
10 лет жили без локальных функций, и еще бы столько же прожили
делаю скидку лишь на то, что это не продакшен код, а так, поиграться в свое удовольствие, т.е. премия не под ударом
рейдеры в топике
А за популяризацию языка Ада накинут.
http://www.google.ru/search?q=крестобляди
http://www.google.ru/search?q=кресто+блядство
Отставить панику.
По запросу крестоблядун ничего не найдено.
а я-то думал мой пост уже проиндексировало.
уже:)
Тут переменные по документации должны захватываться по значению. Поэтому они уже становиться не автоматическими и должны были выжить после выхода из функции.
Если хочется захватить переменную по ссылке, то делается так:
В таком случае она действительно умерла бы автоматически и ссылка оказалась бы в невалидном состоянии по выходу из функции.
Локальные функции в С++03 написали как замену лямбд(безымянных функций). Оно конечно не так удобно, но хоть что-то.
Зачем мне энергосберегающая лампочка? 10 лет жили со свечами, и еще бы столько же прожили.
Будем надеятся, что не кинет исключение.
Потому что
Кстати, гарантия порядка вычисления аргументов перегруженного оператора есть? Гарантии порядка вычисления аргументов функции вроде нет.
> http://ideone.com/V33To
Зачем эти навороты со строками?
И магическую тройку убрать!
> http://ideone.com/V33To
Спасибо, что поправил мой продакшн-код.
Мой код проще. К тому же это не эквивалентный код. У меня создается локальный объект (потокобезопасно), а у вас глобальная переменная static int x = 0;
Метапрограмммирование мощнее, чем в динамически типизированном языке - быть не может.
А вот не правда: Рекурсия не возможна в паттернматчинге. В паттернматчинге не возможен даже такой вывод:
TClass<T&,T>::
А объяснение очень простое: Это не паттернматчинг, а алгоритм унификации.