есть такой демангл
Base::apply<Derive<int>::set(int const&)::{lambda(void)#1}>(bool,bool,int)
удалось добится того же функционала но демангл получиля такой (вопрос не в компиляторе или версии С++, игрался с разными)
Base::apply<Derive<int>::set(int const&)::{lambda()#1}>(bool, bool, Derive<int>::set(int const&)::{lambda()#1})
проблема в последнем параметре
в оригинале там тип шаблона
а у меня лямда
в оригинале ассемблера в этой функции на один параметр больше перед последним(хотя демангл этого не отображает), там передается this наследника
т.е. (bool, bool, this, int) а демангл (bool, bool, int)
вот мой рабочий функционал
но хочу понять что было в оригинале
что бы у меня тоже такой же был демангл
#include <functional>
struct Base
{
template<class Pred>
void apply(bool, bool, Pred call)
{
call();
}
};
template <class T>
struct Derive : public Base
{
T val;
void set(const T & value)
{
apply(false, false, [&]{ val = value; });
}
};
int main()
{
Derive<int> d;
d.set(1);
return 0;
}