Вы можете отказаться от DoStuff через SFINAE:
template<bool enable>
struct Foo {
private:
static void SFINAE_Helper(std::true_type);
typedef std::integral_constant<bool, enable> tag;
public:
decltype(SFINAE_Helper(tag())) DoStuff() { }
};
Помимо того, что этот код довольно нечитабелен, у него есть то преимущество, что вам не нужно делать дополнительных специализаций, но вы можете иметь весь свой код в однойшаблон класса.
РЕДАКТИРОВАТЬ
Альтернатива может выглядеть следующим образом:
template<bool enable>
struct Foo {
private:
typedef std::enable_if<enable> enable_tag;
public:
typename enable_tag::type DoStuff() {}
};