Size: a a a

2020 November 26

АК

Александр Караев... in pro.cxx
Danya
Извиняюсь, что я врываюсь без учета предыдущих обсуждений
Но шаблон функции не является функцией
Следовательно на неё нельзя взять указатель
мы про конкретное инстанцирование говорим
источник

AT

Alexander Tulikov in pro.cxx
Александр Караев
вообще, быстрое гугление показало, что каст указателя на функцию к void* может быть невалиден.

а вот стирание типа через каст в void(*)() должно прокатить:
https://eel.is/c++draft/expr.compound#expr.reinterpret.cast-6
источник

IZ

Ilia Zviagin in pro.cxx
Oleksandr
(2) - не совсем понял что не бывает :)

(3) - шаблонная функция будет "хранить" сигнатуру имплементации, но сигнатура самой шаблонной функции не зависит от параметров шаблона, она одинакова для любых A и B. Поэтому ее саму можно хранить через указатель, без всяких сигнатур имплементации
Я тоже не совсем понял, но то что ты хочешь его не бывает
источник

АК

Александр Караев... in pro.cxx
Oleksandr
(2) - не совсем понял что не бывает :)

(3) - шаблонная функция будет "хранить" сигнатуру имплементации, но сигнатура самой шаблонной функции не зависит от параметров шаблона, она одинакова для любых A и B. Поэтому ее саму можно хранить через указатель, без всяких сигнатур имплементации
источник

IZ

Ilia Zviagin in pro.cxx
Oleksandr
(2) - не совсем понял что не бывает :)

(3) - шаблонная функция будет "хранить" сигнатуру имплементации, но сигнатура самой шаблонной функции не зависит от параметров шаблона, она одинакова для любых A и B. Поэтому ее саму можно хранить через указатель, без всяких сигнатур имплементации
Про 3 - сигнатура могут быть разными, но должны быть совместимыми.
источник

АК

Александр Караев... in pro.cxx
спасибо, недоглядел.
теперь все вопросы должны быть исчерпаны
источник

АК

Александр Караев... in pro.cxx
Ilia Zviagin
Про 3 - сигнатура могут быть разными, но должны быть совместимыми.
Илья, речь просто про временное стирание типа с восстановлением перед вызовом. Никто не собирается сохранять void(*)(int), а вызывать float(*)(bool)
источник

IZ

Ilia Zviagin in pro.cxx
Александр Караев
Илья, речь просто про временное стирание типа с восстановлением перед вызовом. Никто не собирается сохранять void(*)(int), а вызывать float(*)(bool)
Ну, ок
источник

S

Salt in pro.cxx
Студия при оптимизации выкидывала функцию, которая не разу не вызывалась, но от которой брался адрес. (Хукал функцию через minhook, и долго не мог понять, что не так...)
источник

AK

Andrei K in pro.cxx
Salt
Студия при оптимизации выкидывала функцию, которая не разу не вызывалась, но от которой брался адрес. (Хукал функцию через minhook, и долго не мог понять, что не так...)
Очень вряд ли.
источник

VD

Vlad Doc in pro.cxx
Salt
Студия при оптимизации выкидывала функцию, которая не разу не вызывалась, но от которой брался адрес. (Хукал функцию через minhook, и долго не мог понять, что не так...)
А вопрос то в чём?
источник

AK

Andrei K in pro.cxx
Минимальный пример можно? На годболте.
источник

VD

Vlad Doc in pro.cxx
Andrei K
Очень вряд ли.
++
источник

S

Salt in pro.cxx
Не, просто опыт про хранение указателя на функцию
источник

АР

Андрей Руссков... in pro.cxx
Salt
Студия при оптимизации выкидывала функцию, которая не разу не вызывалась, но от которой брался адрес. (Хукал функцию через minhook, и долго не мог понять, что не так...)
от неё брался адрес и тоже не использовался? ИЛи функция инлайнилась?
источник

АР

Андрей Руссков... in pro.cxx
или дело было в 86 году? )
источник

S

Salt in pro.cxx
Андрей Руссков
или дело было в 86 году? )
Год назад, в 2017 студии, 14 стандарт. Адрес собрался и использовался, но по адресу было пусто.
источник

АР

Андрей Руссков... in pro.cxx
ну то есть программа крашилась?
источник

АР

Андрей Руссков... in pro.cxx
и никакой UB вовлечен естественно не был? )
источник

АК

Александр Караев... in pro.cxx
Андрей Руссков
и никакой UB вовлечен естественно не был? )
> хукал функцию
конечно, никакого UB
источник