这个static_assert会被触发吗?

Will this static_assert ever be triggered?

本文关键字:static assert 这个      更新时间:2023-10-16
template<class Int_T,class Integral,typename Best_Fit<Int_T>::type Min_Range,
    typename Best_Fit<Int_T>::type Max_Range>
auto operator+(Integral left,const Int<Int_T,Min_Range,Max_Range>& right)
    ->Int<decltype(left + right.get_data())>
{
    static_assert(std::is_integral<Integral>::value,"Non integral type is not allowed.");
    static_assert(std::is_integral<Int_T>::value,"Non integral type is not allowed.");
    auto data = left + right.get_data();
    Int<decltype(left + right.get_data())> result(data);
    return result;
}  

关键是我不认为这两个static_assert*s*会被触发——即使有人也尝试了。
那么这个Q的答案是什么?

struct dummy {
    operator int() const
    { return 0; }
};
// Where rhs has appropriate type
dummy() + rhs;
std::string x;
Int<int, 3, 5> i;
auto z = x + i;

触发它。