Using GCC 4.2.
I have this metatemplate for conditional type:
template <bool condition, typename Then, typename Else>
struct IF
{
typedef Then RET;
};
template <class Then, class Else>
struct IF<false, Then, Else>
{
typedef Else RET;
};
and when I use it like this:
template <typename T>
class Param
{
IF< sizeof(int)<sizeof(long), long, int>::RET i;
};
it works, but when I use it like this (trying to use template parameters):
template <typename T>
class Param
{
IF< sizeof(int)<sizeof(long), T&, T* >::RET mParam;
};
I am getting this error code:
error: type 'IF<false, T&, T*>' is not derived from type 'Param<T>'
Why is it happening? How to solve it?
Thanks in advance!
In the second case, what
RETis, depends on the template typeT. The compiler needs to be assured that it is going to be a type in all possible instantiations (and not perhaps a static member of some instantiation of IF). You do so with thetypenamekeyword.