Habilitar método com base no parâmetro de modelo booleano
Eu quero implementar uma função privada com base em um parâmetro de modelo booleano. Algo parecido:
#include <iostream>
using namespace std;
template <bool is_enabled = true>
class Aggregator {
public:
void fun(int a) {
funInternal(a);
}
private:
void funInternal(int a, typename std::enable_if<is_enabled>::type* = 0) {
std::cout << "Feature is enabled!" << std::endl;
}
void funInternal(int a, typename std::enable_if<!is_enabled>::type* = 0) {
std::cout << "Feature is disabled!" << std::endl;
}
};
int main()
{
Aggregator<true> a1;
Aggregator<false> a2;
a1.fun(5);
a2.fun(5);
return 0;
}
Mas o programa acima não compila: erro: nenhum tipo chamado 'type' em 'struct std :: enable_if' void funInternal (int a, typename std :: enable_if :: type * = 0).
É possível perceber o comportamento desejado com enable_if?