#include "iostream"
using namespace std;
template < class T> class stack
{
template < class T> struct item { item * prev; T data; } ;
public :
stack( ) { count= 0 ; }
item< T> * it;
T toItem( T) ;
T outItem( ) ;
T pop( ) ;
T slow( ) ;
int count;
} ;
template < class T> T stack< T> :: toItem ( T elem)
{
item < T> * el= new item< T> ;
if ( count== 0 ) { el- > data= elem; el- > prev= 0 ; it= el; count++ ; }
else { el- > data= elem; el- > prev= it; it= el; }
return 0 ;
}
template < class T> T stack < T> :: outItem ( )
{
item< T> * el= new item< T> ; el= it; cout << el- > data << endl;
for ( ; el- > prev! = 0 ; el= el- > prev) { cout << el- > data << endl; }
return 0 ;
}
template < class T> T stack< T> :: pop ( ) { item< T> * l= it- > prev; delete [ ] it; it= l; count-- ; return 0 ; }
template < class T> T stack< T> :: slow ( )
{
stack( ) ;
for ( int i= 0 ; i< 5 ; i++ ) { toItem( rand ( ) % 100 ) ; }
outItem( ) ; pop( ) ; return 0 ;
}
int main( )
{
stack< int > p; p.slow ( ) ;
return 0 ;
}
I2luY2x1ZGUgImlvc3RyZWFtIiAKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAoKdGVtcGxhdGUgPCBjbGFzcyBUPiBjbGFzcyBzdGFjayAKeyAKICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXRlbSB7IGl0ZW0gKiBwcmV2OyBUIGRhdGE7IH07IApwdWJsaWM6ICAgCiAgICBzdGFjaygpIHsgY291bnQ9MDt9IAogICAgaXRlbTxUPiAqIGl0OyAKICAgIFQgdG9JdGVtKFQpOyAKICAgIFQgb3V0SXRlbSgpOyAKICAgIFQgcG9wKCk7IAogICAgVCBzbG93KCk7IAogICAgaW50IGNvdW50OyAKfTsgCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCBzdGFjazxUPjo6dG9JdGVtKFQgZWxlbSkgCnsgCiAgICBpdGVtIDxUPiogZWw9IG5ldyBpdGVtPFQ+OyAKICAgIGlmKGNvdW50PT0wKSB7ICBlbC0+ZGF0YT0gZWxlbTsgZWwtPnByZXY9MDsgaXQ9ZWw7IGNvdW50Kys7IH0gCiAgICBlbHNlIHsgZWwtPmRhdGE9IGVsZW07IGVsLT5wcmV2PWl0OyBpdD1lbDsgfSAKICAgIHJldHVybiAwOyAKfSAKCnRlbXBsYXRlIDxjbGFzcyBUPiBUIHN0YWNrIDxUPjo6b3V0SXRlbSgpIAp7IAogICAgaXRlbTxUPiAqIGVsPSBuZXcgaXRlbTxUPjsgIGVsPWl0OyAgY291dCA8PCBlbC0+ZGF0YSA8PCBlbmRsOyAKICAgIGZvcig7ZWwtPnByZXYhPTA7IGVsPWVsLT5wcmV2KSB7IGNvdXQgPDwgZWwtPmRhdGEgPDwgZW5kbDsgfSAKICAgIHJldHVybiAwOyAKfSAKCnRlbXBsYXRlPGNsYXNzIFQ+IFQgc3RhY2s8VD46OnBvcCgpIHsgaXRlbTxUPiAqbD0gaXQtPnByZXY7IGRlbGV0ZSBbXSBpdDsgaXQ9bDsgY291bnQtLTsgcmV0dXJuIDA7IH0gCnRlbXBsYXRlPGNsYXNzIFQ+IFQgc3RhY2s8VD46OnNsb3coKSAKewogICAgc3RhY2soKTsgCiAgICBmb3IoaW50IGk9MDsgaTw1OyBpKyspIHsgdG9JdGVtKHJhbmQoKSUxMDApOyAgfSAKICAgIG91dEl0ZW0oKTsgcG9wKCk7IHJldHVybiAwOyAKfSAKCmludCBtYWluKCkgCnsKICAgIHN0YWNrPGludD4gcDsgcC5zbG93KCk7IAogICAgcmV0dXJuIDA7IAp9ICA=
compilation info
prog.cpp:7: error: declaration of ‘class T’
prog.cpp:5: error: shadows template parm ‘class T’
prog.cpp: In member function ‘T stack<T>::slow()’:
prog.cpp:37: error: there are no arguments to ‘rand’ that depend on a template parameter, so a declaration of ‘rand’ must be available
prog.cpp:37: error: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
prog.cpp: In member function ‘T stack<T>::slow() [with T = int]’:
prog.cpp:43: instantiated from here
prog.cpp:37: error: ‘rand’ was not declared in this scope
stdout