This is an interview question, which has been done.
Which line has error ?
#include
template void foo(T op1, T op2)
It's called type deducition.
On Line 1, the type of T
can be deduced because parameters op1
and op2
are both int
, making T
an int
.
Whereas on Line 2, you are passing both an int and a double while the function accepts both parameters as T
, the compiler has no clue whether T
should be a double
or an int
.
Line 3 is fine because you specify int
specialization and pass int
s in as well (making the specialization redundant but perfectly OK).
Line 4 is OK because you declare T
to be an int, then casting the char
value of '3'
to its numeric int
value.
Line 5 is an error because you're accessing a function that gets its type from the templated struct it's in, and type deduction only works for functions.