tem04.c
来自「this is a gcc file, you can download it 」· C语言 代码 · 共 183 行
C
183 行
// Build don't link:// 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>// ERROR - .*class Xfourteen {protected: T4 value;public: Xfourteen(T4 init): value(init) {} template <template <typename T4> class T5> // ERROR - .* friend bool isequal (Xfourteen<int>& lhs, Xfourteen<int>& rhs);};// 15// nested template class (v3, template type parameters)template <class T6>// ERROR - .*class Xfifteen {protected: T6 value;public: Xfifteen(T6 init): value(init) {} template <template <typename T6> class T7> class nested {// ERROR - .* int value; public: nested(): value( int(0)) {} };};// 16// member templates (v3, template type parameters)template <class T8>// ERROR - .*class Xsixteen {protected: T8 value;public: Xsixteen(T8 init): value(init) {} template <template <typename T8> class T9> int comp_ge(int test) {// 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>// ERROR - .*class Xeighteen {protected: C12<T14> value; int C12; // ERROR - .*};// 19// more template template redecl teststemplate <typename T16, template <typename T17> class C14>// ERROR - .*class Xnineteen{protected: C14<T16> value; template <class C14> class nested {// 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; ++l) { 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 {// ERROR - .* float T18; // 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 {// ERROR - .* float b; // ERROR - .*};// 23// non-type template parameters v2: reference to objecttemplate <class T20, base& b2> class Xtwentythree {// ERROR - .* float b2; // ERROR - .*};// 24// non-type template parameters v3: pointer to membertemplate <class T20, int base::* b3> class Xtwentyfour {// ERROR - .* float b3; // ERROR - .*};// 25// non-type template parms that use push_class_leveltemplate <class T22> void f1() {// ERROR - .* struct foo { enum T22 { un, du, toi }; // ERROR - .* };}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?