#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;
}
