#include <iostream>
using namespace std;
template < class K> struct MyPoint { } ;
template < class K> struct MyLine { } ;
template < class K> struct MyConstruct { } ;
template < class K> struct MyLess { } ;
template < class K>
struct Kernel_base {
typedef MyPoint< K> Point_2;
typedef MyLine< K> Line_2;
typedef MyConstruct< K> Construct_line_2;
typedef MyLess< K> Less_xy_2;
} ;
struct Kernel : public Kernel_base< Kernel> { } ;
// Generate new Kernel
template < class K> struct NewPoint { } ;
template < class K> struct MyLeftTurn { } ;
template < class K>
struct New_kernel_base : public Kernel_base< K> {
typedef NewPoint< K> Point_2;
typedef MyLeftTurn< K> Left_turn_2;
} ;
struct New_kernel : public New_kernel_base< New_kernel> { } ;
int main( )
{
New_kernel:: Point_2 p, q;
New_kernel:: Construct_line_2 construct_line_2;
New_kernel:: Line_2 l = construct_line_2( p, q) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIEs+IHN0cnVjdCBNeVBvaW50IHsgfTsKdGVtcGxhdGUgPGNsYXNzIEs+IHN0cnVjdCBNeUxpbmUgeyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgSz4gc3RydWN0IE15Q29uc3RydWN0IHsgfTsKdGVtcGxhdGUgPGNsYXNzIEs+IHN0cnVjdCBNeUxlc3MgeyB9OwoKdGVtcGxhdGUgPGNsYXNzIEs+CnN0cnVjdCBLZXJuZWxfYmFzZSB7CiAgICB0eXBlZGVmIE15UG9pbnQ8Sz4gUG9pbnRfMjsKICAgIHR5cGVkZWYgTXlMaW5lPEs+IExpbmVfMjsKICAgIHR5cGVkZWYgTXlDb25zdHJ1Y3Q8Sz4gQ29uc3RydWN0X2xpbmVfMjsKICAgIHR5cGVkZWYgTXlMZXNzPEs+IExlc3NfeHlfMjsKfTsKCnN0cnVjdCBLZXJuZWwgOiBwdWJsaWMgS2VybmVsX2Jhc2U8S2VybmVsPiB7IH07CgovLyBHZW5lcmF0ZSBuZXcgS2VybmVsCnRlbXBsYXRlIDxjbGFzcyBLPiBzdHJ1Y3QgTmV3UG9pbnQgeyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgSz4gc3RydWN0IE15TGVmdFR1cm4geyB9OwoKdGVtcGxhdGU8Y2xhc3MgSz4Kc3RydWN0IE5ld19rZXJuZWxfYmFzZSA6IHB1YmxpYyBLZXJuZWxfYmFzZTxLPiB7CiAgICB0eXBlZGVmIE5ld1BvaW50PEs+IFBvaW50XzI7CiAgICB0eXBlZGVmIE15TGVmdFR1cm48Sz4gTGVmdF90dXJuXzI7Cn07CgpzdHJ1Y3QgTmV3X2tlcm5lbCA6IHB1YmxpYyBOZXdfa2VybmVsX2Jhc2U8TmV3X2tlcm5lbD4ge307CgppbnQgbWFpbigpCnsKICAgIE5ld19rZXJuZWw6OlBvaW50XzIgcCwgcTsKICAgIE5ld19rZXJuZWw6OkNvbnN0cnVjdF9saW5lXzIgY29uc3RydWN0X2xpbmVfMjsKICAgIE5ld19rZXJuZWw6OkxpbmVfMiBsID0gY29uc3RydWN0X2xpbmVfMihwLCBxKTsKICAgIHJldHVybiAwOwp9
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:35:49: error: no match for call to ‘(Kernel_base<New_kernel>::Construct_line_2 {aka MyConstruct<New_kernel>}) (New_kernel_base<New_kernel>::Point_2&, New_kernel_base<New_kernel>::Point_2&)’
New_kernel::Line_2 l = construct_line_2(p, q);
^
stdout