C++ Logo

STD-DISCUSSION

Advanced search

Subject: Re: It seems to a wording defect about template argument deduction for function parameter pack
From: Peter Sommerlad (C++) (peter.cpp_at_[hidden])
Date: 2020-07-16 10:19:00


Jim

jim x via Std-Discussion wrote on 16.07.20 16:28:
> Consider the below code:
>
> template<typename...T>
> void func(T...args){
> }
> int main(){
>   func(1,2.0,'c');
> }
>
>  there's a rule that applied to it to deduce these template arguments
> for this function template (call). It is:
> >For a function parameter pack that occurs at the end of the
> parameter-declaration-list, deduction is performed for each remaining
> argument of the call, taking the type P of the declarator-id of the
> function parameter pack as the corresponding function template parameter
> type. Each deduction deduces template arguments for subsequent positions
> in the template parameter packs expanded by the function parameter pack.
>
> That means for the parameter-declaration T...args, it declares a
> function template park, hence the function parameter type that is used
> to against the type of function argument is T because ...args is the
> declarator-id of this declaration. So, for this function call
> func(1,2.0,'c'), template parameter pack T would be the set consists of
> {int,double,char}.
>
> However, consider the following variant:
>
> template<typename...T>
> void func(T...){
> }
> int main(){
>   func(1,2.0,'c');
> }
>
> There's no declarator-id here, just an abstract-declarator that denote
> the ..., How would the quote be applied to this case? What's the
> corresponding function parameter type here?  It seems to be a wording
> defect for this case.
>
>

What you are asking here corresponds to the situation where in a
function definition you omit names for parameters that are unused int
the function. So there is exactly the same thing happening as in your
first example.

Peter.

-- 
Peter Sommerlad
Better Software: Consulting, Training, Reviews
Modern, Safe & Agile C++
peter.cpp_at_[hidden]
+41 79 432 23 32

STD-DISCUSSION list run by std-discussion-owner@lists.isocpp.org

Older Archives on Google Groups