Presumibilmente i membri di una classe template non dovrebbero essere istanziati a meno che non vengano utilizzati. Tuttavia, questo esempio sembra creare un'istanza del membro do_something
e l'errore enable_if
(che ci si aspetterebbe se lo avessimo istanziato, ma AFAIK non l'abbiamo fatto).I membri di un modello di classe sono istanziati quando viene creata un'istanza della classe?
Mi manca qualcosa di veramente semplice qui?
#include <string>
#include <boost/utility.hpp>
struct some_policy {
typedef boost::integral_constant<bool, false> condition;
};
struct other_policy {
typedef boost::integral_constant<bool, true> condition;
};
template <typename policy>
class test {
void do_something(typename boost::enable_if<typename policy::condition>::type* = 0) {}
};
int main() {
test<other_policy> p1;
test<some_policy> p2;
}
@Niall: Poiché 'enable_if' non ha un membro chiamato' type' quando la condizione è falsa. –
Ok, ho capito, il boost enable_if si aspetta che il tipo abbia un valore incorporato per il quale prova, diversamente da std enable_if, che si aspetta solo la condizione booleana. – Niall