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 31 32 33 34 35 36 37 | #include <cstdlib> #include <iostream> #include <boost/type_traits.hpp> #include <boost/utility/enable_if.hpp> template<typename T> struct Foo { typename boost::enable_if_c<boost::is_same<char,T>::value >::type bar(); typename boost::disable_if_c<boost::is_same<char,T>::value >::type bar(); }; template<typename T> typename boost::disable_if_c<boost::is_same<char,T>::value >::type Foo<T>::bar() { std::cout << "I am generic ..." << std::endl; } template<typename T> typename boost::enable_if_c<boost::is_same<char,T>::value >::type Foo<T>::bar() { std::cout << "I am specific ..." << std::endl; } int main() { Foo<char> f1; f1.bar(); return EXIT_SUCCESS; } |
I2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzLmhwcD4KI2luY2x1ZGUgPGJvb3N0L3V0aWxpdHkvZW5hYmxlX2lmLmhwcD4KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBGb28KewoJdHlwZW5hbWUgYm9vc3Q6OmVuYWJsZV9pZl9jPGJvb3N0Ojppc19zYW1lPGNoYXIsVD46OnZhbHVlID46OnR5cGUKCWJhcigpOwoJCgl0eXBlbmFtZSBib29zdDo6ZGlzYWJsZV9pZl9jPGJvb3N0Ojppc19zYW1lPGNoYXIsVD46OnZhbHVlID46OnR5cGUKCWJhcigpOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KdHlwZW5hbWUgYm9vc3Q6OmRpc2FibGVfaWZfYzxib29zdDo6aXNfc2FtZTxjaGFyLFQ+Ojp2YWx1ZSA+Ojp0eXBlCkZvbzxUPjo6YmFyKCkKewoJc3RkOjpjb3V0IDw8ICJJIGFtIGdlbmVyaWMgLi4uIiA8PCBzdGQ6OmVuZGw7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnR5cGVuYW1lIGJvb3N0OjplbmFibGVfaWZfYzxib29zdDo6aXNfc2FtZTxjaGFyLFQ+Ojp2YWx1ZSA+Ojp0eXBlCkZvbzxUPjo6YmFyKCkKewoJc3RkOjpjb3V0IDw8ICJJIGFtIHNwZWNpZmljIC4uLiIgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpCnsKCUZvbzxjaGFyPiBmMTsKCWYxLmJhcigpOwoJCglyZXR1cm4gRVhJVF9TVUNDRVNTOwp9Cg==
prog.cpp:13: error: ‘typename boost::disable_if_c<boost::is_same::value, void>::type Foo<T>::bar()’ cannot be overloaded prog.cpp:10: error: with ‘typename boost::enable_if_c<boost::is_same::value, void>::type Foo<T>::bar()’ prog.cpp:18: error: prototype for ‘typename boost::disable_if_c<boost::is_same::value, void>::type Foo<T>::bar()’ does not match any in class ‘Foo<T>’ prog.cpp:10: error: candidate is: typename boost::enable_if_c<boost::is_same::value, void>::type Foo<T>::bar()
-
result: Compilation error (maybe you wish to see an example for C++ 4.7.2)


