tags:

views:

78

answers:

1

This is the statement from ISO C++ Standard 14.6.2.4: Dependent template arguments :

  1. A type template-argument is dependent if the type it specifies is dependent.

  2. An integral non-type template-argument is dependent if the constant expression it specifies is value dependent.

  3. A non-integral non-type template-argument is dependent if its type is dependent or it has either of the following forms and contains a nested-name-specifier which specifies a class-name that names a dependent type.

  4. A template template-argument is dependent if it names a template parameter or is a qualified-id with a nested-name-specifier which contains a class-name that names a dependent type.

I am unable to understand these points?

Can any one give examples for these statements?

+2  A: 

This is what I understand. I have marked the individual code snippets in the code inline marked according to the line numbers in the OP.

struct A{
    void f(){}
};

template<class T> struct B{};

// The template argument B<T> is TYPE depdent on the template parameter T                      (1)
template<class T, class U = B<T> > struct T1{};

// The template argument c is VALUE dependent on the template non type parameter 'c'        (2)
template<class T, char c, int d = c> struct T2{};

// The 2nd template argument is TYPE depdent on the template parameter T                    (3)
template<class T, void (T::*p)(void) = &T::f> struct T3{};

// The template template argument B is TYPE depdent on the template parameter T             (4)
template<class T, template<class U = T> class V = B> struct T4{};


int main(){
    T1<int> t1;
    T2<int, 'A', 2> t2;
    T3<A> t3;
    T4<A> t4; 
}
Chubsdad
@Chubsdad: Is This same statement is true under Inheritance..that is by using inheritance..it is true or not.if yes ? can u explain that with an example..Thanks for ur answer
BE Student
@Chubsdad : I think you have missed the difference between a `parameter` and an `argument`. `...template argument U is TYPE depdent on the...`, `U` is a template `parameter` not a template `argument`.
Prasoon Saurav
@Prasoon Saurav :Can u explain it Programmaticaaly.
BE Student
@BE Student : Explain what? The difference between a parameter and an argument?
Prasoon Saurav
@Prasoon Saurav:What you are asking me to tell that difference?
BE Student
@BE Student : I am not asking you to tell the difference. I am asking you to make your `Can u explain it Programmaticaaly` statement more clear and precise.
Prasoon Saurav
@Prasoon Saurav:Ok .Actually I understtod first 2 points.Later 3,4 IAm unable prove that in terms of a program .Thats i asked for help.
BE Student
@BE Student : As far your opening question is concerned I am not sure about `3rd` and `4th` point{thats why haven't answered to your question yet}. You wait for @Johannes Schaub aur some other guy's answer. They will clarify these points. :)
Prasoon Saurav
@Prasoon Saurav:That is what Iam waiting for u and all..Thanks For u Answers and replies
BE Student
@Prasoon Saurav: Thanks for pointing it out. Is it fine now?
Chubsdad
@Chubsdad : Looks fine to me now.
Prasoon Saurav
@Johannes Schaub - litb: this thread requires your blessing :)
Chubsdad