Size: a a a

2020 May 21

CD

Constantine Drozdov in pro.cxx.holywars
//----
#include <utility>

class A
{
public:
   virtual ~A(){}
};

class B: public A
{
};

void foo(std::pair<int, A*> p)
{
   delete p.second;
}

int main()
{
   foo(std::make_pair(0, static_cast<A*>(new B()))); //V572, в данном примере тип и правда можно опустить, но в реальном необходима точная шаблонная подстановка
   return 0;
}
источник

KK

Kirill Kaymakov in pro.cxx.holywars
А, чет лол, я не через пивас, а через сонаркуб гонял
источник

CD

Constantine Drozdov in pro.cxx.holywars
//---
int main()
{
   int x[2];
   int x_size = sizeof(x)/sizeof(x[2]); //V557, хотя другой (ладно хоть не срабатывающий здесь) V568 напоминает нам, что это выражение не вычисляется!
}
источник

CD

Constantine Drozdov in pro.cxx.holywars
//---
#include <vector>

class op_vector
{
public:
   std::vector<int> v;
   template <typename TFunctor>
       void accumulate(TFunctor &functor)
       {
           for (int i = 0; i < (int)v.size(); ++i)
               functor(v[i]); //V607, причем в данном примере у этого метода даже нет ни одной подстановки!
       }
};

int main()
{
}
источник

CD

Constantine Drozdov in pro.cxx.holywars
И таких примеров масса. Из примерно 400 найденных "ошибок" (3 уровень предупреждений я не рассматривал) только 2 оказались настоящими, причем обе в принципиально недостижимом коде (спасибо, я удалил лишние 20 строк кода из проекта!)
источник

CC

Chris Calvin in pro.cxx.holywars
Крч, @webreh, чаще всего сталкиваешься с проблемой поиска компромиса performance vs complexity, вот чем больше хочешь выжимать из тачки, тем более говенно все выглядит
источник

CD

Constantine Drozdov in pro.cxx.holywars
Chris Calvin
Крч, @webreh, чаще всего сталкиваешься с проблемой поиска компромиса performance vs complexity, вот чем больше хочешь выжимать из тачки, тем более говенно все выглядит
Теперь ты понимаешь, почему плюсы в некоторых местах очень странные :)
источник

CC

Chris Calvin in pro.cxx.holywars
Constantine Drozdov
Теперь ты понимаешь, почему плюсы в некоторых местах очень странные :)
да
источник

M

MrSmith in pro.cxx.holywars
Блять что за больная рыжуха
источник

M

MrSmith in pro.cxx.holywars
Везде ее пикчи
источник

G

Gymmasssorla in pro.cxx.holywars
Анонимные макросы реализованы! Использование:


EXEC_MLAMBDA(MLAMBDA(ARG + ARG), 1)


Выдаёт 1 + 1, как и ожидалось.

Теперь рассмотрим как это работает. MLAMBDA(ARG + ARG) раскрывается в:

((_0, _1 ),(poica_pri_arg, _0, _1),(_0, _1),( + ),(poica_pri_arg, _0, _1),(_0, _1),( _0, _1))


Затем макрос EXEC_MLAMBDA к каждый элемент списка применяет к другому макросу, перегруженному по кол-ву аргументов. Так происходит подстановка:

(_0, _1) - <пробел>
(poica_pri_arg, _0, _1) - раскрывается во второй аргумент EXEC_MLAMBDA
(X) - раскрывается в X

Говоря словами, лямбда-макрос - это просто список, ненужные элементы которого игнорируются, части тела остаются неизменными, а аргументы подставляются.
источник

CD

Constantine Drozdov in pro.cxx.holywars
Gymmasssorla
Анонимные макросы реализованы! Использование:


EXEC_MLAMBDA(MLAMBDA(ARG + ARG), 1)


Выдаёт 1 + 1, как и ожидалось.

Теперь рассмотрим как это работает. MLAMBDA(ARG + ARG) раскрывается в:

((_0, _1 ),(poica_pri_arg, _0, _1),(_0, _1),( + ),(poica_pri_arg, _0, _1),(_0, _1),( _0, _1))


Затем макрос EXEC_MLAMBDA к каждый элемент списка применяет к другому макросу, перегруженному по кол-ву аргументов. Так происходит подстановка:

(_0, _1) - <пробел>
(poica_pri_arg, _0, _1) - раскрывается во второй аргумент EXEC_MLAMBDA
(X) - раскрывается в X

Говоря словами, лямбда-макрос - это просто список, ненужные элементы которого игнорируются, части тела остаются неизменными, а аргументы подставляются.
Ты там каррированные инвоки что ли эмулируешь?)
источник

G

Gymmasssorla in pro.cxx.holywars
Constantine Drozdov
Ты там каррированные инвоки что ли эмулируешь?)
Хотел каррировать макрос, но не получилось)
В chaos-pp, однако, каррируют. Но я недостаточно рептилоид, чтобы разобрать там код
источник

CD

Constantine Drozdov in pro.cxx.holywars
Gymmasssorla
Хотел каррировать макрос, но не получилось)
В chaos-pp, однако, каррируют. Но я недостаточно рептилоид, чтобы разобрать там код
Ну вроде у меня самый большой затык был, как делать каррированные инвоки в плюсах не насилуя компилятор
источник

M

MrSmith in pro.cxx.holywars
Gymmasssorla
Хотел каррировать макрос, но не получилось)
В chaos-pp, однако, каррируют. Но я недостаточно рептилоид, чтобы разобрать там код
Раз макросы Тьюринг полные надо в них компилировать теперь
источник

KK

Kirill Kaymakov in pro.cxx.holywars
Gymmasssorla
Анонимные макросы реализованы! Использование:


EXEC_MLAMBDA(MLAMBDA(ARG + ARG), 1)


Выдаёт 1 + 1, как и ожидалось.

Теперь рассмотрим как это работает. MLAMBDA(ARG + ARG) раскрывается в:

((_0, _1 ),(poica_pri_arg, _0, _1),(_0, _1),( + ),(poica_pri_arg, _0, _1),(_0, _1),( _0, _1))


Затем макрос EXEC_MLAMBDA к каждый элемент списка применяет к другому макросу, перегруженному по кол-ву аргументов. Так происходит подстановка:

(_0, _1) - <пробел>
(poica_pri_arg, _0, _1) - раскрывается во второй аргумент EXEC_MLAMBDA
(X) - раскрывается в X

Говоря словами, лямбда-макрос - это просто список, ненужные элементы которого игнорируются, части тела остаются неизменными, а аргументы подставляются.
А может не надо эту сишность делать?
источник

G

Gymmasssorla in pro.cxx.holywars
MrSmith
Раз макросы Тьюринг полные надо в них компилировать теперь
Кстати идея. Создать компилятор, выхлоп которого будут макросы
источник

G

Gymmasssorla in pro.cxx.holywars
Kirill Kaymakov
А может не надо эту сишность делать?
Надо-надо
источник

M

MrSmith in pro.cxx.holywars
Gymmasssorla
Кстати идея. Создать компилятор, выхлоп которого будут макросы
Рофельно однако
источник

CD

Constantine Drozdov in pro.cxx.holywars
Gymmasssorla
Кстати идея. Создать компилятор, выхлоп которого будут макросы
Напиши лучше исполнитель марковских алгоритмов на макросах
источник