Podobno członkowie klasy szablonu nie powinni być tworzone, chyba że są używane. Jednak ta próbka wydaje się tworzyć egzemplarz użytkownika do_something
, a enable_if
kończy się niepowodzeniem (czego można by się było spodziewać, gdybyśmy go stworzyli - ale AFAIK my nie).Czy członkowie klasy tworzą instancję, gdy tworzona jest klasa?
Czy brakuje mi czegoś naprawdę podstawowego?
#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: Ponieważ 'enable_if' nie ma członka o nazwie' type', gdy warunek jest fałszywy. –
OK, Rozumiem, boost boost pozwala, aby typ miał osadzoną wartość, której testuje, w przeciwieństwie do std enable_if, który właśnie oczekuje stanu boolowskiego. – Niall