⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tem03.c

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 C
字号:
// Build don't link:// 980808-980824 bkoz// template parameter redeclaration bugs// 14.1 Template parameters// p 13// The scope of a template-parameter extens from its point of// declartion until the end of its template. In particular, a// template-parameter can be used in the declaration of subsequent// template-parameters and their default arguments. // 14.6.1 Locally declared names// p 4// A template-parameter shall not be redeclared within its scope// (including nested scopes). A template-parameter shall not have the// sname name as the template name.// 01 // declared friend templatetemplate <class T4>// ERROR - .*class Xone {protected:  T4* next;  T4* prev;  T4 value;public:  Xone(): next(0), prev(0), value(1999){}  Xone(T4 init): value(init) {}  // these are ok:  // can also do template-decl and then can ditch the foward-declaration  // template <class T5> friend bool isequal (Xone<T5>& lhs, Xone<T5>& rhs);  // this is not ok:  template <class T4> friend bool isequal (Xone<T4>& lhs, Xone<T4>& rhs);// ERROR - .*};// 02// nested template classtemplate <class T6>// ERROR - .*class Xtwo {protected:  T6* next;  T6* prev;  T6 value;public:  Xtwo(): next(0), prev(0), value(1999){}  Xtwo(T6 init): value(init) {}  template <class T6> class nested {// ERROR - .*    T6 value;  public:    nested(): value( T6(0)) {}  };};// 03// member templatestemplate <class T8>// ERROR - .*class Xthree {protected:  T8* next;  T8* prev;  T8 value;public:  Xthree(): next(0), prev(0), value(1999){}  Xthree(T8 init): value(init) {}  template <class T8> T8 comp_ge(T8 test) {// ERROR - .*    T8 local_value;    if (local_value > value)       return local_value;    else      return value;  }};// 04// local names (14.6.1 p 4)template <class T10, int i> struct Xfour {// ERROR - .*  int T10; // ERROR - .*  void f(){    char T10;  }};// 05// using different tempate-parms for out-of-line defstemplate <class T12, int i> struct Xfive {  void f();};template <class T13, int i> void Xfive<T13,i>::f() {// ERROR - .*  int T13; // ERROR - .*  int T12; //should be ok}// 06// multiple names at the same leveltemplate <class T14, class T14> class Xsix { // ERROR - .*private:public:  void f();};// 07// multiple names, one in template parameter one in class-nametemplate <class T12> class T12; // ERROR - .*// 08 // with multiple template params, and second (third) one is redeclaredtemplate <class T16, int i, class T161> class Xseven { // ERROR - .*private:  char T161; // ERROR - .*public:  template <class U>  friend bool fooy(U u);  template <class T161>  friend bool foo(T161 u)    {      Xseven<T161, 5, int> obj;      return (obj.inst == u.inst);    }};// 09 // check for correct scoping of member templatestemplate <class T>struct S1{  template <class U>  void f(U u)    {      S1<U> s2u(u);      s2u.g();    }  template <class U> //ok  void f2(U u)    {      S1<U> s2u(u);      s2u.g();    }};// 10 // check for non-type parameters, should still be able to redeclare?// local names (14.6.1 p 4)template <class T18, int i> class Xten {// ERROR - .*  float i; // ERROR - .*};// 11 // declared friend template, non-type parameterstemplate <long l>// ERROR - .*class Xeleven {public:  template <long l> friend bool isequal (Xeleven<5> lhs, Xeleven<5> rhs);  // ERROR - .*};// 12// nested template class, non-type parameterstemplate <long l>// ERROR - .*class Xtwelve {public:  template <long l> class nested {// ERROR - .    long value;  public:    nested(): value(0) {}  };};// 13// member templates, non-type parameterstemplate <long l>// ERROR - .*struct Xthirteen {  template <long l> long comp_ge(long test) {// ERROR - .    long local_value;    if (local_value > value)       return local_value;    else      return value;  }};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -