[Bug c++/56506] variadic class template specialization not selected as best match

mmehlich at semanticdesigns dot com gcc-bugzilla@gcc.gnu.org
Mon Mar 4 17:00:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56506

--- Comment #3 from Michael Mehlich <mmehlich at semanticdesigns dot com> 2013-03-04 16:58:45 UTC ---
Considering that based on 14.5.3(5) a template member declaration
  X<Y<Z<T...>,T>...>::type x;
with T bound to int,bool,char must expand to
  X<Y<Z<int,bool,char>,int>, 
  Y<Z<int,bool,char>,bool>, 
  Y<Z<int,bool,char>,char>>::type x;
I'd consider it rather counter-intuitive if I cannot get a match as described
in my original message.

Does the standard actually specify how the matching process works in detail
in the presence of variadic templates?  Going through the template section,
I haven't found anything definite that would put light onto this issue
(though I might have missed it).

I can't really understand your "because it is not followed by ...";
after all, in X<Y<Z<T...>, U>...> the parameter pack U is also not immediately
followed by a ..., so why is that case ok but my original one isn't?

It is pretty easy to implement a matcher that successfully matches the case
in the original message, so I don't think the standard has any excuse not to
consider this a successful match, either.  
Notwithstanding that, the standards committee might have decided otherwise.
If so, where does it say so in the standard, resp. how can I conclude this
from what I can find in there?

--
  Michael



More information about the Gcc-bugs mailing list