#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==
compilation info
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()
stdout