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

📄 tem04.c

📁 linux下编程用 编译软件
💻 C
字号:
// { dg-do assemble  }// 980827 bkoz// template parameter redeclaration bugs, part two:// template template params and expanded template non-type parms// 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// same name as the template name.// 14 // declared friend template (v3, template type parameters)template <class T4>// { dg-error "" } .*class Xfourteen {protected:  T4 value;public:  Xfourteen(T4 init): value(init) {}  template <template <typename T4> class T5> // { dg-error "" } .*  friend bool isequal (Xfourteen<int>& lhs, Xfourteen<int>& rhs);};// 15// nested template class (v3, template type parameters)template <class T6>// { dg-error "" } .*class Xfifteen {protected:  T6 value;public:  Xfifteen(T6 init): value(init) {}  template <template <typename T6> class T7> class nested {// { dg-error "" } .*    int value;  public:    nested(): value( int(0)) {}  };};// 16// member templates (v3, template type parameters)template <class T8>// { dg-error "" } .*class Xsixteen {protected:  T8 value;public:  Xsixteen(T8 init): value(init) {}  template <template <typename T8> class T9> int comp_ge(int test) {// { dg-error "" } .*    int local_value;    if (local_value > value)       return local_value;    else      return value;  }};// 17// declared friend template (v4, template type parameters on the class)template <typename T9> class tem_base {public:  T9 value;};template <typename T10, template <typename T12> class C10>class Xseventeen {protected:  C10<T10> value;public:  Xseventeen(){}  template <typename T12> // ok??  friend bool isequal (Xseventeen<T10, tem_base>& lhs, 		       Xseventeen<T10, tem_base>& rhs);};//template class Xseventeen<int, tem_base>;// 18// more template template redecl teststemplate <typename T14, template <typename T15> class C12>// { dg-error "" } .*class Xeighteen {protected:  C12<T14> value; // { dg-error "" }  int C12; // { dg-error "" } .*};// 19// more template template redecl teststemplate <typename T16, template <typename T17> class C14>// { dg-error "" } .*class Xnineteen{protected:  C14<T16> value;  template <class C14> class nested {// { dg-error "" } .*    T16 value;  public:    nested(): value( T16(0)) {}  };};// 20// local names (14.6.1 p 4) part two, variable names as template paramtemplate <class T17, int i> struct Xtwenty {  void f(){    T17 my_type; //ok    for (int j = 0; j < 5; ++j)      {	T17 my_type; //ok	++my_type;      }  }};// 14.1 Template parameters// p 4// A non-type templat- parameter shall have one of the following// (optionally cv-qualified) types://   integral or enumeration type//   pointer to object or pointer to function//   referenct to object or referece to function//   pointer to member// 21 // non-type template parameters v1: enumenum my_enum {my_A = 45, my_B, my_C};template <my_enum T18> class Xtwentyone {// { dg-error "" } .*  float T18; // { dg-error "" } .*};// 22// non-type template parameters v1: pointer to objectstruct base {  int	gcount;  int ret_gcount() {return gcount;}};template <class T20, base* b> class Xtwentytwo {// { dg-error "" } .*  float b; // { dg-error "" } .*};// 23// non-type template parameters v2: reference to objecttemplate <class T20, base& b2> class Xtwentythree {// { dg-error "" } .*  float b2; // { dg-error "" } .*};// 24// non-type template parameters v3: pointer to membertemplate <class T20, int base::* b3> class Xtwentyfour {// { dg-error "" } .*  float b3; // { dg-error "" } .*};// 25// non-type template parms that use push_class_leveltemplate <class T22> void f1() {// { dg-error "" } .*  struct foo {     enum T22 { un, du, toi }; // { dg-error "" } .*  };}

⌨️ 快捷键说明

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