Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Никогда. Я ругаю исключительно шаблонную магию — извращенное использование шаблонов для реализации функций, не реализуемых языком по причине его убожества в сфере метапрограммирования.
Так о том и речь, что вы ругаете программирование на шаблонах.
Оно вот такое сейчас. Было чуть другим (более сложным и слабым) еще пятнадцать лет назад. И будет чуть другим еще лет через 5-10-15.
Причем, поскольку вы не прикладываете никаких усилий, чтобы изменить текущее положение дел, программирование на шаблонах будет развиваться без учета вашего веского (на самом деле нет) мнения. И, поскольку вы опять останетесь за бортом магистрального развития языка, вам так и останется сетовать на то, что мысли такого уважаемого (на самом деле нет) и заслуженного (тут ХЗ) в очередной раз отправили в пешее эротическое.
Здравствуйте, andrey.desman, Вы писали:
R>>Этот пример работает на msvc, но не работает на gcc. Причем, не работает как раз вот тот самый "финт ушами", о котором я упоминал здесь
. gcc вместо того, чтобы продетектить невалидность выражения внутри констрейнта, с какого-то перепуга начинает диагностировать ошибки в этом выражении. Для меня такое поведение очень странно. Я с этим еще буду разбираться. Было бы здорово, если бы кто-нибудь посмотрел этот пример, особенно на код VisitStruct, возможно, будут идеи, как это можно усовершенствовать.
AD>Тут gcc прав, а MSVC нет. Происходит примерно следущее (упростил): AD>Что такое лямбда-выражение? Это prvalue какого-то класса, который объявлен в ближайшем скоупе. Таким образом, условно это разворачивается в следущий код: AD>Ошибка возникает вне констрейнта. В нем нормальное выражение, которое ошибок не содержит.
Здравствуйте, so5team, Вы писали:
S>вы ругаете программирование на шаблонах.
Не "программирование", а извращение, возведенное в норму.
S>Оно вот такое сейчас.
Самое-то смешное, что в большинстве других сфер систематическое использование побочных эффектов или не поощряется, или прямо осуждается. C++ — единственный известный мне пример, где на побочных эффектах было выстроено целое направление, почитаемое за мейнстрим. Это вполне в духе [пост]модернизма — как угодно, лишь бы "небанально".
S>вы не прикладываете никаких усилий, чтобы изменить текущее положение дел
Если б я не прикладывал — Вы б не исходили ядом на мои сообщения. Кому интересно — те их читают и делают выводы. Это ж все не для Вас писано.
Здравствуйте, rg45, Вы писали:
R>При этом этот приём предлагался на cppcon: https://youtu.be/zRYlQGMdISI?list=PL8BKNWfxbDIeqp7VM2AOxJjKK3ubKzFA2&t=209 R>Четвертый пункт — Reflection — to_tuple. Там внутри constexpr if используется вот такой requires expression, внутри которого лямбда, а в лямбде structured binding. Как это понимать?
Как шляпу понимать. Оно ни в gcc, ни в clang не работает.
У него первый if всегда истинный, потому что внутри requires всегда валидное выражение.
Но стоит подсунуть туда структуру не из двух элементов, как все накроется, потому что наполнение лямбды кривое.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Не "программирование", а извращение, возведенное в норму.
Видите ли, за неимением этой самой "нормы" люди пользуются тем, что есть. Т.е. то, что используется, и есть норма.
S>>Оно вот такое сейчас.
ЕМ>Самое-то смешное, что в большинстве других сфер систематическое использование побочных эффектов или не поощряется, или прямо осуждается. C++ — единственный известный мне пример, где на побочных эффектах было выстроено целое направление, почитаемое за мейнстрим. Это вполне в духе [пост]модернизма — как угодно, лишь бы "небанально".
Так известные вам примеры -- это давным-давно не актуальные Algol 68, PL/I и макро-ассемблеры.
Вот в D чтобы упростить метапрограммирование сделали мощный static if и возможность сгенерировать строку, которая затем подается на вход компилятора через специальную конструкцию mixin (ну, по крайней мере в мое время так было). Что удобно в простейших случаях, но очень быстро превращается в лапшу на более-менее сложных конструкциях, поскольку static if-ы начинают вкладываться в static if-ы и все равно код приходится расшифровывать чтобы выяснить что попадает а then-branch, а что в else-branch.
В Rust-е пришлось делать отдельный язык макросов для генерации дополнительного кода. Т.е. там вообще в рамках одного языка не смогли удержаться.
Тогда как в C++ более-менее все в одном русле.
Да, многое с первого взгляда не очевидно, но затем логика в этом обнаруживается. И приходит понимание того, что a) все не так просто, как кажется диванным экспертам и b) развитие языка таки идет последовательно, эволюционно, насколько это возможно в рамках design by committee, и c) язык совершенствуется по мере накопления опыта (в том числе и опыта работы с "побочными эффектами".
Ну и да, тут уже тов.landerhigh очень много про "крепки задним умом" расписал. Мне нет смысла повторяться, а вам бы прислушаться.
S>>вы не прикладываете никаких усилий, чтобы изменить текущее положение дел
ЕМ>Если б я не прикладывал — Вы б не исходили ядом на мои сообщения. Кому интересно — те их читают и делают выводы. Это ж все не для Вас писано.
Вы неверное понимаете почему я лишний раз подчеркиваю какую херню вы гоните и как мало должно быть доверия к вашим словам.
Вокруг C++ слишком много небылиц и искажения реального положения дел. Когда такие небылицы распространяют типа эксперты с 40 годами опыта, то не грех указать, что этот самый экспертный эксперт не имеет экспертизы в тех вещах, о которых говорит.
Дабы те, что читает и делает выводы могли вносить поправочные коэффициенты в сказанное вами.
W>По правилам хорошего тона в C++ нужно всегда использовать ссылки вместо указателей (кроме интеграции с кодом на Си) и по возможности не управлять памятью вручную, т.к. это чревато утечками.
Ключевая проблема тут не C++ и не ссылки, а ваш чрезвычайный этатизм, доходящий до дрожи в коленках от одной только мысли о проходе на красный свет. Связный список — это как раз тот случай, когда правила надо слать лесом. Посмотрите на вырвимозгную реализацию списка в Rust. Эта структура данных не шепчет, а прямо-таки вопиёт "я не натягиваюсь на правила, выдуманные кампусными гомосеками-акадЭмиками, ломай эти правила нафиг, если не хочешь тронуться умом".