このクラス:
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 は役に立ちますが、うまくいきません。誰かがこの単純なケースの例を教えてもらえますか?