Есть ли способ заставить оба компилятора быть счастливыми?
для этого:
template<short value>
struct static_signbits
{
enum { result = (!!(value & 0x8000) == !!(value & 0x4000)) ? (static_signbits<short(value << 1)>::result + 1) : 0 };
};
template<>
struct static_signbits<0>
{
enum
{
result = 15
};
};
лязг дает мне:
error: non-type template argument is not a constant expression
enum { result = (!!(value & 0x8000) == !!(value & 0x4000)) ? (static_signbits<short(value << 1)>::result + 1) : 0 };
^~~~~~~~~~~~~~~~~
Видимо, недовольны броском на шорт?
Очевидно, я мог бы использовать constexpr вместо этого, но мне также требуется обратная совместимость с C ++ 98