Size: a a a

Compiler Development

2021 May 04

D

Danya in Compiler Development
$ cat b.cpp
struct A {
       void foo() {}
};

int main() {
       A a;
       auto p = &a.foo;
}
$ clang++ b.cpp
b.cpp:7:11: error: cannot create a non-constant pointer
     to member function
       auto p = &a.foo;
                ^~~~~~
1 error generated.


Второе просто невалидный код)
источник

TS

Timur Safin in Compiler Development
Звёздочка с другого края int (A::*p)(int); (FWIW)
источник

AT

Alexander Tchitchigi... in Compiler Development
Значит, я забыл синтаксис взятия указателей на фанкции-члены. Либо его вообще выпилили в каком-то стандарте, если из них хоть что-то выпиливают.
источник

AT

Alexander Tchitchigi... in Compiler Development
А они выпиливают — диграммы и триграммы точно выпилили.
источник

D

Danya in Compiler Development
Тогда, судя по вашим заявлениям, почему у них типы одинаковые? Как различать когда надо this предоставлять, а когда нет?
источник

AT

Alexander Tchitchigi... in Compiler Development
Да кто ж помнит где там звёздочки надо расставлять?! 😂
источник

D

Danya in Compiler Development
Только триграфы выпилили, к сожалению
источник

AT

Alexander Tchitchigi... in Compiler Development
У них не одинаковые типы — я такого и не говорил. 🤷‍♀️
источник

D

Danya in Compiler Development
А как они отличаются?
источник

D

Danya in Compiler Development
int (A::*)(int);
Вот это для незахватывающего this
источник

AT

Alexander Tchitchigi... in Compiler Development
Я эту потеху, скорее всего, читал ещё в Design and Evolution. Во-первых, очевидно, устарело, во-вторых, мне лень шарить по новым стандартам, а D&E вообще уже нет. 🤷‍♀️
источник

D

Danya in Compiler Development
Ну насколько я знаю, а D&E куча невалидного кода с целью показать как оно могло бы быть)
источник

AT

Alexander Tchitchigi... in Compiler Development
А может я и сочинил про захват this в C++. Без GC это реально сомнительное дело, скорее всего в C++ так никогда не делали, может даже и не пытались.
источник

AT

Alexander Tchitchigi... in Compiler Development
Скорее всего, я смутно помнил, что указатели на метод "знают", что им нужно скармливать this и без него вызвать не получится вообще, и "растащил" эту мысль на замыкание this. Аберрация памяти, возраст — не иначе. 😅
источник

D

Danya in Compiler Development
Со всеми бывает😂
источник

AK

Andrei Kurosh in Compiler Development
Да что там - даже в языках с GC некоторые умудряются терять this при захвате метода (я смотрю на тебя, джиес)
источник

AT

Alexander Tchitchigi... in Compiler Development
Там не "потерянный", а "альтернативно захваченный" this. 😉
источник

卜根 in Compiler Development
кто-то пишет компилятор C++?
источник

AK

Andrei Kurosh in Compiler Development
Насколько я помню, "альтернативный this" не захватывается при взятии, а подставляется при вызове за неимением настоящего
источник

D

Danya in Compiler Development
источник