1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | struct A {}; struct B {}; template < typename Head, typename... Tail> struct X : public Head, public Tail... { X(int _i) : i(_i) { } // add copy constructor X(const X& other) : i(other.i) {} int i; }; template < typename Head > struct X<Head> { }; int main(int argc, const char *argv[]) { X<A, B> x(5); X<A, B> y(x); // This must not be leagal! X<B, A> z(x); return 0; } |
c3RydWN0IEEge307CnN0cnVjdCBCIHt9OwoKdGVtcGxhdGUgPCB0eXBlbmFtZSBIZWFkLAogICAgICAgICAgIHR5cGVuYW1lLi4uIFRhaWw+CnN0cnVjdCBYIDogcHVibGljIEhlYWQsCiAgICAgICAgICAgcHVibGljIFRhaWwuLi4KewogICAgWChpbnQgX2kpIDogaShfaSkgeyB9CgogICAgLy8gYWRkIGNvcHkgY29uc3RydWN0b3IKICAgIFgoY29uc3QgWCYgb3RoZXIpIDogaShvdGhlci5pKSB7fQoKICAgIGludCBpOwp9OwoKdGVtcGxhdGUgPCB0eXBlbmFtZSBIZWFkID4Kc3RydWN0IFg8SGVhZD4geyB9OwoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKewogICAgWDxBLCBCPiB4KDUpOwogICAgWDxBLCBCPiB5KHgpOwoKICAgIC8vIFRoaXMgbXVzdCBub3QgYmUgbGVhZ2FsIQogICAgWDxCLCBBPiB6KHgpOwoKICAgIHJldHVybiAwOwp9Cg==
prog.cpp: In function 'int main(int, const char**)':
prog.cpp:26:16: error: no matching function for call to 'X<B, A>::X(X<A, B>&)'
prog.cpp:12:5: note: candidates are: X<Head, Tail>::X(const X<Head, Tail>&) [with Head = B, Tail = {A}, X<Head, Tail> = X<B, A>]
prog.cpp:9:5: note: X<Head, Tail>::X(int) [with Head = B, Tail = {A}]
-
result: Compilation error (maybe you wish to see an example for C++11)


