sigmaN
sigmaN

Reputation: 197

Can't understand C++11 template function parameter deduction

template <int T> struct int2type{};

template<int I>
void func( int2type<I> )
{
     printf("int_val: %i\n", I);
}

int main(int argc, char *argv[])
{
    func( int2type<10>() ); 
}

Of course it prints 10.

I have some basic idea of how templates and type deduction works, but i can't understand this code. What is the magic behind I? How we know I from int2type instance passed to func?

Upvotes: 0

Views: 75

Answers (1)

M.M
M.M

Reputation: 141554

Template argument deduction is covered by section [temp.deduct.call] of the C++14 Standard. It is too big to reproduce in full, but the gist is that the compiler will compare the argument type int2type<10> with the parameter type int2type<I> and try to find a value for I that makes both of those the same.

In [temp.deduct.type]/9 and /17 it is specified that the parameter class-template-name<i>, where i is a non-type template parameter, is matched by the argument class-template-name<n> where n is an argument of the same type.

Upvotes: 1

Related Questions