Russian Qt Forum

Компиляторы и платформы => Компиляторы => Тема начата: Eugene Efremov от Апрель 23, 2008, 22:20



Название: howto disable "enumeral mismatch in conditional expression"?
Отправлено: Eugene Efremov от Апрель 23, 2008, 22:20
Дано:
Код:
struct false_t
{
enum { res = false };
};

struct true_t
{
enum { res = true };
};

template<int i>
struct check_t
{
enum
{
res = (i!=0) ? true_t::res : false_t::res
};
};

Результат:
warning: enumeral mismatch in conditional expression: `true_t::<anonymous enum>' vs `false_t::<anonymous enum>'

Существует в природе способ отключить оный warning, не трогая все остальные? На опцию -fcond-mismatch оно говорит no longer supported...

P.S. mingw, gcc 3.4.5.


Название: Re: howto disable "enumeral mismatch in conditional expression"?
Отправлено: Eugene Efremov от Апрель 23, 2008, 22:33
Вот, нашел (конкретное извращение, однако):
Код:
		res = (i!=0) ? static_cast<int>(true_t::res) : static_cast<int>(false_t::res)

Хорошо, что это редко бывает нужно...


Название: Re: howto disable "enumeral mismatch in conditional expression"?
Отправлено: Tonal от Апрель 24, 2008, 07:14
Может так:
Код:
struct false_t {
  static const bool res = false;
};

struct true_t {
  static const bool res = true;
};

template<int i>
struct check_t {
  static const bool res = i != 0;
};