See Tiago last post.
It is the same algorithm described in this propsal.



Sent from my Galaxy


-------- Original message --------
From: Marcin Jaczewski <marcinjaczewski86@gmail.com>
Date: 8/2/24 9:40 PM (GMT+04:00)
To: organicoman <organicoman@yahoo.fr>
Cc: Marcin Jaczewski <marcinjaczewski86@gmail.com>, std-proposals@lists.isocpp.org
Subject: Re: [std-proposals] Function overload set type information loss

pt., 2 sie 2024 o 18:35 organicoman <organicoman@yahoo.fr> napisaƂ(a):
>
>
>
> Lest be charitable and assume you mean this code:
>
>
> ```
> template<typename T>
> void foo() { cout <<typeid(T).name()<<endl;}
>
> auto useType(effdecltype(foo)  f)
> {
>   using T = __get_ortho_at__<0>(f);
>   f();
>   return T(0);
> }
>
> template<typename T>
> void consumeType(T t)
> {  cout << typeid(t).name(); }
>
> int main()
> {
>     vector<effdecltype(foo)> vec;
>     vec.push_back(&foo<int>);
>     vec.push_back(&foo<double>);
>     vec.push_back(&foo<float>);
>     for(int i=0; i<5; ++i)
>         vec.push_back(&foo<char>);
>     for(const auto& F: vec)
>        consumeType(useType(F));
> }
> ```
>
>
> It can be easy fixed by helper:
>
>
> ```
> template<typename T>
> void consumeTypeHelper()
> {
>     foo<T>();
>     return consumeType(T{});
> }
>
> int main()
> {
>     vector<void(*)()> vec;
>     vec.push_back(&consumeTypeHelper<int>);
>     vec.push_back(&consumeTypeHelper<double>);
>     vec.push_back(&consumeTypeHelper<float>);
>     for(int i=0; i<5; ++i)
>         vec.push_back(&consumeTypeHelper<char>);
>     for(const auto& F: vec)
>        F();
> }
> ```
>
> Done. Problem fixed in C++11
>





> Very good... nice try.
> Unfortunately you miss the point.
>
> I showed a loop over a set of functions returning many types.
> Imagine you have a container of slots, which returns different types ( i already said that many times)
> Given the current state of C++ you can store them only as. Let say.
> vector<std::any(*)(int, double)>
> How can you tell what type the called function returned before it was hiden inside std::any?
> Is it clear?
>
>

Then show this code, I fixed your "example", now show code that can't
be fixed in the same way.
If you can't write it, then its means this code can't exist and is not
a real life problem.