Пример:
struct IntWrapper { int x; operator int() const { return x; } ... }
static_assert(std::is_integral<IntWrapper>::value, "Invalid type.");
Можно ли получить std :: is_integral<IntWrapper>:: значение, чтобы быть правдой?
Благодарю.
Можно ли получить
std::is_integral<IntWrapper>::value
быть правдой?
Да, это возможно. Но не без создания неопределенного поведения. То есть когда вы пытаетесь сделать это, полученное неопределенное поведение может быть именно тем, что вы хотите. Или это может быть все, что вы не хотите. И тестирование не поможет.
Но еще не все потеряно. Вы можете легко создать свою собственную черту, чтобы делать то, что вы хотите. Например:
template <class T>
struct IsMyInt
: std::is_integral<T>
{
};
template <>
struct IsMyInt<IntWrapper>
: std::true_type
{
};
static_assert(IsMyInt<IntWrapper>::value, "Invalid type.");
IsMyInt
ведет себя именно так, как вы хотели std::is_integral
ведет себя, но без неопределенного поведения. Так что теперь все, что вам нужно сделать, это использовать IsMyInt
вместо std::is_integral
,