C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Extension to runtime polymorphism proposed

From: Jason McKesson <jmckesson_at_[hidden]>
Date: Tue, 31 Mar 2026 23:40:51 -0400
On Tue, Mar 31, 2026 at 9:23 PM Muneem via Std-Proposals
<std-proposals_at_[hidden]> wrote:
>
> Responding to Mr. Jason McKesson's near and dear feedback dated [31-3-2026] (I had some issues with my digest settings, so I'm replying manually):
>
> First, I would like to clarify that the reason I responded late was because I couldn't find his mail until someone was kind enough to remind me that your (McKesson's) response did, in fact, exist.
>
> I did think of that; in fact, that's the main reason why I couldn't sleep, to be honest with you. Let me break it down on why I didn't use the suggested technique:
>
> It can't technically work the way you would expect, since functions can be overloaded based on enums, and if it can't be overloaded, then it can't have different return types. Why does this matter? Well, the STL containers don't share a common container base, so making this work would require you to add a base class with virtual functions like pop_back(), at(), etc. Then you would have to implement them for each derived class and then return the appropriate derived class.

Maybe your example was missing something, but taking it as it was
presented, the enum in question was a template parameter. And a class
template parameter at that (since it was clearly *not* a function
parameter, nor was there a template header). The "overloading" happens
via template instantiation. Since template parameters are constant
expressions, you can have them return different types based on the
result of constant expression evaluation. As long as you use `if
constexpr` rather than `switch`, that is.

Received on 2026-04-01 03:41:04