Date: Thu, 27 Dec 2007 17:01:38 +0100 From: "Heiko Wundram (Beenic)" <wundram@beenic.net> To: freebsd-hackers@freebsd.org Subject: Re: OT: C++ Template Functions Message-ID: <200712271701.38821.wundram@beenic.net> In-Reply-To: <4773C7E5.3090302@pacific.net.sg> References: <200712271621.12167.wundram@beenic.net> <4773C7E5.3090302@pacific.net.sg>
next in thread | previous in thread | raw e-mail | index | archive | help
Am Donnerstag, 27. Dezember 2007 16:42:29 schrieb Erich Dollansky: > Hi, > > Heiko Wundram (Beenic) wrote: > > The problem is most probably related to the fact that the group of member > > functions is only discriminated by return type (i.e., the template > > parameter defines the return type), not by parameter (which could be > > inferred). > > if nothing got changed over the last years, it is not possible to do > this by definition. > > When I needed this the last time, I used a enum as an additonal > parameter to achieve this. > > I know, it is not perfect, but it leads to what I intended. > > It should work here too. I know, it is not the prefect solution. This is perfectly possible (nowadays? I've been using this for quite some time now, but not in the "complexity" of the original mail). Take the following code, for example, which compiles perfectly fine with gcc (and works, of course): """ template <typename T, typename U> T* newop(U test) { return new T(test); } int main(int argc, char** argv) { int* x = newop<int>(1); delete x; } """ The condition with template parameter expansion in a function template parameter list is that those parameters that can be inferred don't have to be passed, but those that aren't inferrable have to be, which is the case here with only one parameter, because the return value cannot be inferred. The second is inferred to be "int". Anyway, what's bugging me is that if I define Test<V> in test2() to be Test<int> or any explicit template, the code compiles fine. Only if I use a template parameter of the function test2() to declare x (i.e., Test<V>) does the code fail. Thanks for the reply! -- Heiko Wundram Product & Application Development
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200712271701.38821.wundram>