C++ Logo

std-proposals

Advanced search

Re: New "static_virtual" keyword

From: Andrey Semashev <andrey.semashev_at_[hidden]>
Date: Thu, 18 Mar 2021 03:49:04 +0300
On 3/18/21 12:12 AM, Phil Bouchard via Std-Proposals wrote:
> 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.
>
> It won't create a run-time virtual table.

The C++ language does not define such a thing. In real world, whether
there will be a virtual function table or not depends on the compiler
and its optimization capabilities.

What's the difference in terms of the C++ language?

Received on 2021-03-17 19:49:26