Like I said, it won't create a virtual table and much faster resulting code when handled at compile-time.

On 3/17/21 6:46 PM, Ryan P. Nicholl via Std-Proposals wrote:
And what would this *do* that function overriding does not?



-------- Original Message --------
On Mar 17, 2021, 17:12, Phil Bouchard via Std-Proposals < std-proposals@lists.isocpp.org> wrote:

It won't create a run-time virtual table.

On 3/17/21 5:03 PM, Andrey Semashev via Std-Proposals wrote:
On 3/17/21 10:41 PM, Phil Bouchard via Std-Proposals wrote:
New keyword proposal to allow inheritance at compile-time. Ex:

template <typename T>

struct container

{

     static_virtual T * begin() {...}

     static_virtual T * end() {...}

     static_virtual T * rbegin() {...}

     static_virtual T * rend() {...}

};

template <typename T>

struct list : container<T>

{

     static_virtual T * begin() {...}

     static_virtual T * end() {...}

     static_virtual T * rbegin() {...}

     static_virtual T * rend() {...}

};

template <typename T>

ostream & ostream(ostream & out, container<T> const & c)

{

     for (auto i = c.begin(); i != c.end(); ++ i)

         out << * i << endl;

     return out;

}

int main()

{

     list<int> l;

     l.push_back(1);

     l.push_back(2);

     l.push_back(3);

     cout << l << endl;

}

I'm not sure how it is different from the good old virtual.
--

Phil Bouchard
Founder
C.: (819) 328-4743

Fornux Logo

--

Phil Bouchard
Founder
C.: (819) 328-4743

Fornux Logo