#include <iostream>
using namespace std;
template < class T, typename comp>
struct klasa {
comp komparator;
klasa( const T & a, const T & b, comp C = greater< T> ( ) ) : komparator( C)
{
cout << C( a, b) << endl;
}
} ;
struct MyCompare
{
bool operator( ) ( const int & a, const int & b) { return true ; }
} ;
bool fPtr( const int & a, const int & b) { return false ; }
int main( )
{
klasa< int , greater< int >> a( 1 , 2 ) ;
klasa< int , MyCompare> b( 5 , 2 , MyCompare( ) ) ;
auto lessThan = [ ] ( const int & a, const int & b) { return a < b; } ;
klasa< int , decltype( lessThan) > c( 1 , 5 , lessThan) ;
klasa< int , decltype( fPtr) > d( 0 , 0 , fPtr) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnRlbXBsYXRlIDxjbGFzcyBULCB0eXBlbmFtZSBjb21wPgpzdHJ1Y3Qga2xhc2EgewoJY29tcCBrb21wYXJhdG9yOwogICAga2xhc2EoY29uc3QgVCAmYSwgY29uc3QgVCAmYiwgY29tcCBDID0gZ3JlYXRlcjxUPigpKSA6IGtvbXBhcmF0b3IoQykgCiAgICB7CiAgICAgICAgY291dCA8PCBDKGEsIGIpIDw8IGVuZGw7CiAgICB9Cn07CiAKc3RydWN0IE15Q29tcGFyZQp7CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgaW50JiBhLCBjb25zdCBpbnQmIGIpIHsgcmV0dXJuIHRydWU7IH0KfTsKIApib29sIGZQdHIoY29uc3QgaW50JiBhLCBjb25zdCBpbnQmIGIpIHsgcmV0dXJuIGZhbHNlOyB9CiAKaW50IG1haW4oKSAKewogICAga2xhc2E8aW50LCBncmVhdGVyPGludD4+IGEoMSwgMik7CiAgICBrbGFzYTxpbnQsIE15Q29tcGFyZT4gYig1LCAyLCBNeUNvbXBhcmUoKSk7CiAKICAgIGF1dG8gbGVzc1RoYW4gPSBbXShjb25zdCBpbnQmIGEsIGNvbnN0IGludCYgYikgeyByZXR1cm4gYSA8IGI7IH07CiAgICBrbGFzYTxpbnQsIGRlY2x0eXBlKGxlc3NUaGFuKT4gYygxLCA1LCBsZXNzVGhhbik7CiAKICAgIGtsYXNhPGludCwgZGVjbHR5cGUoZlB0cik+IGQoMCwgMCwgZlB0cik7CiAKICAgIHJldHVybiAwOwp9
compilation info
prog.cpp: In instantiation of ‘struct klasa<int, bool(const int&, const int&)>’:
prog.cpp:28:33: required from here
prog.cpp:6:7: error: field ‘klasa<int, bool(const int&, const int&)>::komparator’ invalidly declared function type
comp komparator;
^
stdout