Этот класс:Как я могу иметь необязательный конструктор по умолчанию?
template <class T>
struct A {
A() : t(T()) {
}
A(const T& t_) : t(t_) {
}
T t;
};
не будет компилироваться, если T не имеет конструктора по умолчанию. Это одна:
template <class T>
struct A {
A(const T& t_) : t(t_) {
}
T t;
};
не будет иметь конструктор по умолчанию, даже если T имеет конструктор по умолчанию.
Я хочу иметь оба - Если нет T(), я не хочу A().
Я знаю, что SFINAE необходимо использовать. И что Boost.traits и Boost.enable_if могут помочь, но я не могу заставить его работать. Может ли кто-нибудь дать мне пример этого простого случая?
что вы хотите(), чтобы вызвать на Т, если Т не имеет конструктора не по умолчанию? – Mark
Если нет T(), я не хочу A() вообще. –
Возможно, я ошибаюсь, но вы уверены, что первый из них не сработает, * если вы не пытаетесь использовать версию по умолчанию с T, у которой нет конструктора по умолчанию *? Оба GCC и Comeau в порядке с ним. Как вы создаете экземпляр класса? – UncleBens