Предполагается, что члены класса шаблона не должны создаваться, если только они не используются. Однако этот пример, как представляется, создает экземпляр элемента do_something
, и ошибка enable_if
(что можно было бы ожидать, если бы мы его создали, но AFAIK у нас не было).Являются ли элементы шаблона класса, созданные при создании экземпляра класса?
Я пропустил что-то действительно основное здесь?
#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: Поскольку 'enable_if' не имеет члена, называемого' type', когда условие является ложным. –
Хорошо, я понимаю, что boost_if ожидает, что тип имеет встроенное значение, которое он тестирует, в отличие от std enable_if, который просто ожидает логическое условие. – Niall